繁体   English   中英

如何将绘图图形保存到位图?

[英]How to save drawing Graphics to bitmap?

我想将对图形所做的更改保存到位图文件中。 我在pictureBox中有来自相机的图像,当我单击鼠标时,我添加了网格并指向图像(据我所知,在图像的前面),在此之后,我想从相机中保存带有img的图形,但我只img,不绘制网格和点。 我该怎么办? 我创建图形是这样的:

 g = Graphics.FromHwnd(postureImg.Handle);
 SolidBrush brush_Grey = new SolidBrush(Color.Black);
 SolidBrush brush_Gold = new SolidBrush(Color.Gold);                   
 Rectangle rect = new Rectangle(dPoint1, new Size(10, 10));
 g.FillEllipse(brush_Gold, rect);                   

 points[i] = new Point(e.X, e.Y);
       i++;
       if (i >= 2)
       {
        Pen myPen = new Pen(Color.Red);
        myPen.Width = 1;
        g.DrawLine(myPen, points[0].X, points[0].Y, points[1].X, points[1].Y);
        }
        g.Dispose();

下次我做g.DrawLine和g.FillEllipse并有这样的图像: 在此处输入图片说明 我怎样才能把这张图片变成位图? 谢谢!

好的,有关您在做什么的快速教程。

首先,Graphics对象? 它所做的就是修改您指向的原始图像/位图。 在这种情况下,您要修改您的poseImg中包含的原始图像/位图。 这就是为什么您不必将图片“重新导入”到该PictureBox中的原因-因为图形就地对其进行了修改。

这意味着,之后,您要做的就是将原始图像/位图保存到文件中-因此,您真正要问的是:“如何将PictureBox中的位图保存到文件中?”

在这种情况下,答案很简单:

postureImg.Image.Save(@"C:\someplace.jpg", ImageFormat.Jpeg);

编辑:啊,我忘了VS用PicBoxes做一些奇怪的事情-它有一个“实际”图像和一个“显示”图像。 您一直在编辑的是“显示”图像,它不是永久性的(如果刷新表格,它将消失。)

老实说,如果您从不直接进入图片框中的图像,可能会更好。 举例来说,这里的代码工作:

Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
SolidBrush brush_Grey = new SolidBrush(Color.Green);
SolidBrush brush_Gold = new SolidBrush(Color.Red);
Rectangle rect = new Rectangle(new Point(100, 100), new Size(10, 10));
g.FillEllipse(brush_Gold, rect);
g.Dispose();
pictureBox1.Image.Save(@"C:\tmpSO1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

……这是行不通的一个很好的提示,如果您在表单加载时执行此操作,则不会显示红色圆圈; 如果由于剪切等原因必须刷新表格,红色圆圈将消失。

无论如何,这里的代码可以正常工作:

Bitmap bmp = new Bitmap(pictureBox1.Image);
Graphics g = Graphics.FromImage(bmp);
SolidBrush brush_Grey = new SolidBrush(Color.Green);
SolidBrush brush_Gold = new SolidBrush(Color.Red);
Rectangle rect = new Rectangle(new Point(100, 100), new Size(10, 10));
g.FillEllipse(brush_Gold, rect);
g.Dispose();
pictureBox1.Image = bmp;
pictureBox1.Image.Save(@"C:\tmpSO2.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

无需就地修改PictureBox,而是从中加载单独的BMP,然后将其重新加载到其中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM