如何在WPF中直接绘制位图(BitmapSource, WriteableBitmap)
本文关键字:位图 BitmapSource WriteableBitmap 绘制 WPF | 更新日期: 2023-09-27 18:07:10
在GDI+ Winforms中我会这样做:
Bitmap b = new Bitmap(32,32);
Graphics g = Graphics.FromImage(b);
//some graphics code...`
如何在WPF中做同样的事情,与DrawingContext?
我看到这个问题是在2011年问的,但我坚信迟到总比没有好,唯一的其他"答案"不符合这个网站的标准,所以我将提供我自己的帮助任何人在未来发现这个问题。
下面是一个简单的示例,展示了如何绘制矩形并将其保存到磁盘上。也许有更好的(更简洁的)方法来做这件事,但是,唉,我在网上找到的每个链接都得到了同样的"耸耸肩,我不知道"的答案。
public static void CreateWpfImage()
{
int imageWidth = 100;
int imageHeight = 100;
string outputFile = "C:/Users/Krythic/Desktop/Test.png";
// Create the Rectangle
DrawingVisual visual = new DrawingVisual();
DrawingContext context = visual.RenderOpen();
context.DrawRectangle(Brushes.Red, null, new Rect(20,20,32,32));
context.Close();
// Create the Bitmap and render the rectangle onto it.
RenderTargetBitmap bmp = new RenderTargetBitmap(imageWidth, imageHeight, 96, 96, PixelFormats.Pbgra32);
bmp.Render(visual);
// Save the image to a location on the disk.
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
encoder.Save(new FileStream(outputFile, FileMode.Create));
}
据我所知,RenderTargetBitmap被认为是一个ImageSource,所以你应该能够直接链接到wpf控件的图像源,而不需要任何类型的转换。
你可以使用RenderTargetBitmap将任何WPF内容渲染成位图,因为它本身就是一个BitmapSource
。有了这个,你可以使用WPF中的标准绘图操作在位图上"绘制"。