0

我很难理解图形对象是如何绘制的。假设有这个功能:

private void DrawLineOnOverlay()
{
        using (var g = pictureBox.CreateGraphics())
        {
            g.DrawLine(OverlayPen, cursorStartx, cursorStarty, cursorEndx, cursorEndy);
        }         
}

在您已经完成此操作的图片框控件中绘制简单的线条:

pictureBox.Image = BitmapToBeLoaded;    // Load an 8-bit indexed Bitmap 

我的理解是,加载的图像和使用图形对象绘制的像素都是同一图像的一部分:pictureBox.Image

但是这个:

Bitmap graphic = pictureBox.Image;
if (graphic  != null )  
{               
    graphic = new Bitmap (pictureBox.Image);       
    graphic.Save( "C:\\packed.png", ImageFormat.Png);       
}

不起作用:保存的图像不会在图像上显示以红色绘制的线条。为什么这个?怎么了?

4

1 回答 1

0

如果您希望能够保存绘图,则需要在表面上绘制它们,然后保存表面。通常,在PictureBox画布上绘图不会让您保存图像,因为Image该类与绘图无关。Image只是一个抽象类,Bitmap它能够加载 GDI+ 支持的图像文件,然后将其呈现为PictureBox. 绘图是在作为Graphics对象的 GDI+ 绘图表面上完成的。

您可以创建一个曲面:

Bitmap surface = new Bitmap(640, 480);
Graphics g = Graphics.FromImage(surface);

using (var OverlayPen = new Pen(Color.Red))
{
  g.DrawLine(OverlayPen, cursorStartx, cursorStarty, cursorEndx, cursorEndy);
}

如果要显示图纸,可以设置SurfacePictureBox图片。并且记住在using创建钢笔或画笔之类的图形对象时使用模式,因为如果不这样做,它们将一直保留在内存中直到上下文结束,并且它们可能会在某些时候导致溢出。

然后保存:

surface.Save( "C:\\packed.png", ImageFormat.Png);
于 2013-10-11T11:42:09.457 回答