我在Windows窗体上有一个pictureBox.
我执行以下操作将PNG文件加载到其中.
Bitmap bm = (Bitmap)Image.FromFile("Image.PNG", true);
Bitmap tmp;
public Form1() {
InitializeComponent();
this.tmp = new Bitmap(bm.Width, bm.Height);
}
private void pictureBox1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(this.bm, new Rectangle(0, 0, tmp.Width, tmp.Height), 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel);
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要在图像上绘制内容然后再次显示结果.绘图矩形只能通过Graphics类完成.
我需要在图像上绘制所需的矩形,再次将其作为Image类的实例并将其保存到 this.bm
我可以添加一个执行按钮this.pictureBox1.Refresh();,强制再次绘制pictureBox,但我无法将Graphics转换为Image.因此,我无法将编辑保存this.bm到位图.
这是我的问题,我看不出来.
你需要做的是使用Graphics.FromImage方法,它允许你直接在图像上绘制而不是Graphics在Paint方法中创建临时对象:
using (Graphics g = Graphics.FromImage(this.bm))
{
g.DrawRectangle(...);
}
Run Code Online (Sandbox Code Playgroud)
这样做而不是(或除了)钩住Paint方法PictureBox.这样,您根本不需要使用临时图像或Graphics对象,当您完成修改原始位图(this.bm)后,您可以调用pictureBox1.Refresh以强制重新显示图像.