【发布时间】:2017-02-21 00:37:58
【问题描述】:
我是 C# 和 WPF 的新手,我可能完全看错了。我有一个 JPEG 字节数组作为源。我无法改变这一点。我需要获取数组,执行一些计算并在 JPEG 区域中绘制矩形。然后我将其写入 Image XAML 控件。
我得到了 JPEG,我可以将其转换为 ImageSource 并将其显示为 ImageControl。我找不到从ImageSource 获取绘图上下文的方法。我使用ImageSourceConverter 读取JPEG 数组,这个类返回一个ImageSource 实例,呵呵!
ImageSource mImage = (ImageSource)mConverter.ConvertFrom(mImageBuffer);
ImageSource 没有绘图上下文属性。
似乎我需要的是DrawingImage,它派生自ImageSource,并具有绘图上下文属性。
如何使用DrawingImage 而不是ImageSource。
我查看了ImageDrawing 类,它有一个ImageSource 属性。此类没有绘图上下文。
我目前正在研究 Visual 类,不胜感激。
编辑: 感谢@nefarious 为我指明了正确的方向。我以以下内容结束:
ImageSource mImage = (ImageSource)mConverter.ConvertFrom(mImageBuffer);
BitmapSource bImage = mImage as BitmapSource;
// Draw a Rectangle
DrawingVisual dVisual = new DrawingVisual();
using (DrawingContext dc = dVisual.RenderOpen())
{
dc.DrawImage(bImage, new Rect(0, 0, bImage.PixelWidth, bImage.PixelHeight));
dc.DrawRectangle(Brushes.Green, null, new Rect(20, 20, 150, 100));
}
RenderTargetBitmap targetBitmap = new RenderTargetBitmap(640,480,96,96, PixelFormats.Default);
targetBitmap.Render(dVisual);
WriteableBitmap wBitmap = new WriteableBitmap(targetBitmap);
image.Source = wBitmap;
【问题讨论】:
-
有趣的是,您现在正在加载 ImageSource,尽管您坚持要加载 WinForms 位图。无论如何,您可能想看看WriteableBitmapEx。
-
我不记得想要 WinForms 位图。我从未使用过 WinForms?
-
在两天前的上一个问题中,我试图告诉您不要使用 System.Drawing 命名空间中的类,因为它是 WinForms,但没有成功.我不得不编辑你错误接受的答案。
-
我接受的答案要求我确保我知道我使用的是 wpf 类而不是 WinForms 类。我混合它们是因为我不知道哪个是哪个.. 我一直想要 wpf。
-
这不是真的。在我编辑之前,它以“尝试使用 System.Drawing.Bitmap”结束,然后你接受了它。我告诉过你,这不是你在 WPF 中通常会做的事情,而且它可能会给遇到同样问题的其他新手提供不好的建议。