我正在試圖製作一個簡單的應用程序,用戶可以在面板上繪製並將其保存到計算機中作爲位圖。然而,當我進入保存部分時,我得到的只是一個空白(白色)位圖。在面板上繪圖,另存爲位圖
我一直在瀏覽很多其他解決方案,我非常確定我正在保存位圖,所以我開始懷疑我的繪圖過程是否不正確。這到底是什麼錯誤?
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