我正在试图制作一个简单的应用程序,用户可以在面板上绘制并将其保存到计算机中作为位图。然而,当我进入保存部分时,我得到的只是一个空白(白色)位图。在面板上绘图,另存为位图
我一直在浏览很多其他解决方案,我非常确定我正在保存位图,所以我开始怀疑我的绘图过程是否不正确。这到底是什么错误?
public partial class Form1 : Form
{
SolidBrush brush;
Pen pen;
Point[] points = new Point[3];
Graphics display;
Bitmap bmap;
public Form1()
{
InitializeComponent();
display = panel1.CreateGraphics();
bmap = new Bitmap(panel1.Width, panel1.Height);
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
brush = new SolidBrush(Color.Black);
pen = new Pen(Color.Black);
display.FillEllipse(brush, e.X, e.Y, 10, 10);
panel1.DrawToBitmap(bmap, new Rectangle(0, 0, panel1.Width, panel1.Height));
//this.Invalidate();
}
private void clearToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics display = panel1.CreateGraphics();
display.Clear(panel1.BackColor);
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
bmap.Save(@"C:\Temp\Test.bmp");
}
}
编辑 有了这个版本,我只看到一个黑色BMP,我甚至不看到正在创建了我的屏幕上省略号。虽然我注意到如果我将无效和绘制位图返回到mousedown事件中,那么保存按钮将保存最后一个椭圆,而屏幕上仍然没有任何东西出现。
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
mousedown = true;
x = e.X;
y = e.Y;
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
//Graphics g = e.Graphics;
if(mousedown==true)
{
brush = new SolidBrush(Color.Black);
pen = new Pen(Color.Black);
Graphics.FromImage(bmap).FillEllipse(brush, x, y, 10, 10);
panel1.Invalidate();
//panel1.DrawToBitmap(bmap, new Rectangle(0, 0, panel1.Width, panel1.Height));
//panel1.Invalidate();
}
}
关于CreateGraphics有很多很多问题。始终以相同的答案,不要使用它。相反,使用Graphics.FromImage()绘制位图。 panel1.Invalidate()获取它的屏幕更新,panel1.Paint事件来绘制它。 – 2013-05-09 11:25:32
我在这里有点迷路。我使用panel1_MouseDown只是为了保持鼠标点击的坐标以及鼠标点击的布尔值。现在我甚至无法再看到我的椭圆,相反,面板保持白色,而保存的文件完全是黑色的。我将编辑我的更新版本的帖子。 – krikara 2013-05-09 11:48:16