我有一个已经在屏幕上绘制的 Graphics 对象,需要将其保存到 png 或 bmp 文件中。Graphics 似乎不支持直接完成此操作,但肯定有某种方式可以实现。
步骤是什么?
以下是代码:
Bitmap bitmap = new Bitmap(Convert.ToInt32(1024), Convert.ToInt32(1024), System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);
// Add drawing commands here
g.Clear(Color.Green);
bitmap.Save(@"C:\Users\johndoe\test.png", ImageFormat.Png);
如果您的图形在表单上,您可以使用以下方法:
private void DrawImagePointF(PaintEventArgs e)
{
... Above code goes here ...
e.Graphics.DrawImage(bitmap, 0, 0);
}
另外,如果想要在网页上节省空间,您可以使用以下代码:
MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, ImageFormat.Png);
var pngData = memoryStream.ToArray();
<img src="data:image/png;base64,@(Convert.ToBase64String(pngData))"/>
图形对象是 GDI+ 绘图表面。它们必须有一个附加的设备上下文以便绘制,即一个窗体或图像。
将其复制到一个Bitmap
中,然后调用位图的Save
方法。
请注意,如果您正在通过获取屏幕的设备上下文来直接绘制到屏幕上,则保存您刚刚绘制到屏幕上的内容的唯一方法是通过从屏幕向Bitmap
绘制并反转该过程。这是可能的,但显然直接使用相同的代码绘制到位图中会更加容易。
Graphics g = Graphics.FromImage(bitmap)
,然后渲染到该图形(g)上,而不是你原始的图形对象。接下来,您可以使用 bitmap.Save 来保存您所呈现的内容。 - ToolmakerSteve试试这个,我用起来很好用...
private void SaveControlImage(Control ctr)
{
try
{
var imagePath = @"C:\Image.png";
Image bmp = new Bitmap(ctr.Width, ctr.Height);
var gg = Graphics.FromImage(bmp);
var rect = ctr.RectangleToScreen(ctr.ClientRectangle);
gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size);
bmp.Save(imagePath);
Process.Start(imagePath);
}
catch (Exception)
{
//
}
}
Graphics graph = CreateGraphics();
Bitmap bmpPicture = new Bitmap("filename.bmp");
graph.DrawImage(bmpPicture, width, height);
你可能正在绘制图像或控件。如果是在图像上,请使用
Image.Save("myfile.png",ImageFormat.Png)