我是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;
答案 0 :(得分:1)
你有没有看过使用Visuals,我不知道它们有多高效,但似乎你无法将源复制到ImageSource并直接绘制到它中。
创建DrawingVisual并将ImageSource和Rectangle绘制到绘图视觉的绘图上下文中。
然后使用WriteableBitmap在图片中显示;