这是一个小例子,它为我澄清了一些事情(我也为此苦苦挣扎)。
pBox 是 Form1 上的 PictureBox,使其至少为 50x50
appPath 派生自 System.Reflection 但使用您喜欢的任何路径
有两个按钮,一个用于绘制,一个用于保存,它们的点击事件在下面的代码中。
我学到的东西:
(1)“pBox.Image =”除了初始化 pBox 图像之外什么都不做,它不一定是我发现使用的每个示例的文件名(保存到同一个文件时遇到问题,因为它被共享锁定)。此外,如果您的目标是查看整个控件表面上的内容,您可能希望在初始化时将大小设置为您需要的大小。我在这个例子中使用了 pBox 的大小,但通常我使用位图大小(因为我通常从一个真实的图片文件开始)。
(2) 我总是遇到问题,要么看到我的绘图显示在控件上,要么看到我的更改保存在输出文件中(或两者兼而有之)。在我之前的尝试中,我会在控件和位图上复制绘图。当然这不是必需的,但编辑后的位图确实需要重新加载到 control.image 中......这就是我错过的这个难题的一部分。
(A) 从 control.image 创建位图并在位图上绘制
(B) 将位图加载到 control.Image 中(这样可以看到绘制引起的变化)
(C) 保存控件。图像
(2-选项)您有一个全局(或传递的)位图(可能来自真实文件)
(A) 在位图上绘制
(B) 将位图加载到 control.Image 中(这样你就可以看到变化了)
(C) 保存位图
public Form1()
{
InitializeComponent();
pBox.Image = new Bitmap(pBox.Width, pBox.Height);
}
private void DrawStuff1_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(pBox.Image);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.Red, 5, 5, 25, 25); //hard-coded size to reduce clutter
pBox.Image = bmp; //this makes your changes visible
}
private void Save_Click(object sender, EventArgs e)
{
pBox.Image.Save(appPath + "SavedImage.bmp");
}