WPF:以编程方式将Rectangle绘制到ImageSource实例

时间:2017-02-18 17:57:06

标签: c# wpf xaml

我是C#和WPF的新手,我可能会认为这完全错了。我有一个JPEG字节数组作为源。我无法改变这一点。我需要获取数组,执行一些计算并在JPEG区域中绘制矩形。然后我将它写入Image XAML控件。

我获得了JPEG,我可以将其转换为ImageSource并将其显示为ImageControl。我找不到从ImageSource获取绘图上下文的方法。我使用ImageSourceConverter来读取JPEG数组,这个类返回一个ImageSource实例,duh!。

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;

1 个答案:

答案 0 :(得分:1)

你有没有看过使用Visuals,我不知道它们有多高效,但似乎你无法将源复制到ImageSource并直接绘制到它中。

创建DrawingVisual并将ImageSource和Rectangle绘制到绘图视觉的绘图上下文中。

然后使用WriteableBitmap在图片中显示;