在GDI + Winforms中我会这样做:
Bitmap b = new Bitmap(32,32);
Graphics g = Graphics.FromImage(b);
//some graphics code...`
如何使用DrawingContext在WPF中执行相同的操作?
答案 0 :(得分:7)
您可以使用RenderTargetBitmap将任何WPF内容呈现为位图,因为它本身就是BitmapSource
。这样,您可以使用standard drawing operations in WPF在位图上“绘制”。
答案 1 :(得分:3)
我看到这个问题是在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控件的图像源,而无需进行任何转换。