picturebox加载resoucer图片_C#通过创建画布生成图片的两种方式对比

有些时候pictureBox中的图片需要根据不同的条件来动态加载,可能加载完成之后还需要使用Graphics对象在图片上面动态绘制文字,线条之类的,绘制完成之后我们又需要把pictureBox中展示的内容保存成一张图片,在其他地方使用,若使用方式不对,我们输出的图片始终是原来的图片,并不是我们修改之后的图片。

1、使用PictureBox.CreateGraphics()

PictureBox.CreateGraphics()是使用控件本身来获取画布,由控件获取的画布就是控件自己的画布,是画不到其他地方的。而且此时graphics是在picturebox控件上画图,不是在picturebox控件所在的图片上画图(相当于此时是在电脑屏幕上临时绘制,只要控件触发重绘机制,graphics所绘制的内容就会消失)

Graphics g = pictureBox1.CreateGraphics();Pen pen = new Pen(new SolidBrush(Color.Red), 2);Point p1 = new Point(2, 18);Point p2 = new Point(18, 0);g.DrawLine(pen, p1, p2);pictureBox3.Image = pictureBox1.Image;
aca17ea9b737bf957b754e93f79bda75.gif

使用PictureBox.CreateGraphics()

我们看到我们绘制的红线在picturebox1控件中显示了,但是picturebox3控件得到的还是picturebox1的原图,我们将界面拖拽至桌面外之后,picturebox1上红线也消失了。

2、使用Graphics.FromImage()

Graphics.FromImage()是根据已存在的图像来创建画布,创建之后可以更改已存在的图像,首先将已存在的画布载入成Image对象,然后使用Graphics.FromImage()来创建画布

Bitmap bmp = new Bitmap(pictureBox1.Image);Graphics g = Graphics.FromImage((Image)bmp);//绘制一条红色的斜线Pen pen = new Pen(new SolidBrush(Color.Red), 2);Point p1 = new Point(2, 18);Point p2 = new Point(18, 0);g.DrawLine(pen, p1, p2);//将修改的图片显示在pictureBox2pictureBox2.Image = bmp;
c4001a56adff7bf36147513dea62345d.gif

使用Graphics.FromImage()

我们看到我们绘制的红线在picturebox1控件中没有显示(因为我们是以picturebox1的画布为原型重新实例化了一个bitmap对象,然后以这个bitmap对象来创建的画布),但是picturebox2控件显示的是我们重绘之后的图片,我们将界面拖拽至桌面外之后,picturebox2上红线仍然存在。若再调用bmp.Save("d:FromImage.png"),我们得到的就是重绘之后的图片。

2c951cee11dfe10e8e27e4ae54d2e952.png

重绘之后的图片

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值