将System.Drawing.Graphics保存到png或bmp

时间:2010-05-28 12:16:57

标签: c# graphics

我有一个我在屏幕上绘制的Graphics对象,我需要将它保存到png或bmp文件中。图形似乎不直接支持,但它必须以某种方式。

步骤是什么?

5 个答案:

答案 0 :(得分:21)

以下是代码:

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 +绘图表面。它们必须具有附加的设备上下文,即表单或图像。

答案 1 :(得分:8)

将其复制到Bitmap,然后调用位图的Save方法。

请注意,如果您字面上绘制到屏幕上(通过抓住屏幕的设备上下文),那么保存刚刚绘制到屏幕上的内容的唯一方法是通过绘制来反转过程屏幕 a Bitmap。这是可能的,但直接绘制到Bitmap显然要容易得多(使用与绘制到屏幕相同的代码)。

答案 2 :(得分:5)

试试这个,对我来说很好......

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)
    {
        //
    }
}

答案 3 :(得分:1)

您可能正在绘制图像或控件。如果在图像上使用

    Image.Save("myfile.png",ImageFormat.Png)

如果在控件上绘图,请使用Control.DrawToBitmap(),然后按上述方式保存返回的图像。

感谢您的纠正 - 我不知道您可以直接画到屏幕上。

答案 4 :(得分:1)

Graphics graph = CreateGraphics();
Bitmap bmpPicture = new Bitmap("filename.bmp");

graph.DrawImage(bmpPicture, width, height);