C# 绘图程序不会在屏幕上创建任何线条,因为我尝试使用位图进行绘制
C# paint program won't create any lines on the screen since I tried to draw using a bitmap
这是我的源代码。当我按下按钮移动鼠标时,我似乎无法让位图显示在面板上绘制的线条。很沮丧,想找人帮我完成代码,这样我就可以为我 9 岁的女儿完成应用程序。提前谢谢你...
namespace TV_PAINT
{
public partial class ALANA_PAINT : Form
{
Graphics g;
Pen p = new Pen(Color.Black, 7);
Point sp = new Point(0, 0);
Point ep = new Point(0, 0);
int m = 0;
Bitmap BP;
public ALANA_PAINT()
{
InitializeComponent();
tb1.Text = p.Width.ToString();
BP = new Bitmap(pnl1.ClientSize.Width, pnl1.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
}
private void closeButton_Click(object sender, EventArgs e)
{
pnl1.Dispose();
p.Dispose();
this.Close();
}
private void clearButton_Click(object sender, EventArgs e)
{
//pnl1.Invalidate();
p.Color = System.Drawing.Color.Black;
p.Width = 7;
tb1.Text = p.Width.ToString();
//pnl1.Invalidate();
}
private void pnl1_MouseDown(object sender, MouseEventArgs e)
{
sp = e.Location;
if (e.Button == MouseButtons.Left)
m = 1;
if (e.Button == MouseButtons.Right)
m = 1;
}
private void pnl1_MouseMove(object sender, MouseEventArgs e)
{
if (m == 1)
{
ep = e.Location;
//g = pnl1.CreateGraphics();
Graphics g = Graphics.FromImage(BP);
g.DrawLine(p, sp, ep);
}
sp = ep;
}
private void pnl1_MouseUp(object sender, MouseEventArgs e)
{
m = 0;
}
BP只是表格中的一个变量。如我所见,它没有显示在您的表单中的任何位置。为什么你需要它的位图。
您可以这样做,只需获取表单的图形,然后使用该图形进行绘制。 https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx
注意: 你需要在窗体的PaintEvent上做,否则下一次重绘后你的绘图将被删除,所以你需要一些变量来存储你所有的线条, 然后在 paint 事件中绘制它们。
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.FillRectangle(myBrush, new Rectangle(0, 0, 200, 300));
myBrush.Dispose();
formGraphics.Dispose();
已更新:
如果要将更改保存到位图。您可以使用 Form.DrawToBitmap 将表单中的绘图保存为位图,然后调用 bitmap.Save() 到目录中的文件。
这是我的源代码。当我按下按钮移动鼠标时,我似乎无法让位图显示在面板上绘制的线条。很沮丧,想找人帮我完成代码,这样我就可以为我 9 岁的女儿完成应用程序。提前谢谢你...
namespace TV_PAINT
{
public partial class ALANA_PAINT : Form
{
Graphics g;
Pen p = new Pen(Color.Black, 7);
Point sp = new Point(0, 0);
Point ep = new Point(0, 0);
int m = 0;
Bitmap BP;
public ALANA_PAINT()
{
InitializeComponent();
tb1.Text = p.Width.ToString();
BP = new Bitmap(pnl1.ClientSize.Width, pnl1.ClientSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
}
private void closeButton_Click(object sender, EventArgs e)
{
pnl1.Dispose();
p.Dispose();
this.Close();
}
private void clearButton_Click(object sender, EventArgs e)
{
//pnl1.Invalidate();
p.Color = System.Drawing.Color.Black;
p.Width = 7;
tb1.Text = p.Width.ToString();
//pnl1.Invalidate();
}
private void pnl1_MouseDown(object sender, MouseEventArgs e)
{
sp = e.Location;
if (e.Button == MouseButtons.Left)
m = 1;
if (e.Button == MouseButtons.Right)
m = 1;
}
private void pnl1_MouseMove(object sender, MouseEventArgs e)
{
if (m == 1)
{
ep = e.Location;
//g = pnl1.CreateGraphics();
Graphics g = Graphics.FromImage(BP);
g.DrawLine(p, sp, ep);
}
sp = ep;
}
private void pnl1_MouseUp(object sender, MouseEventArgs e)
{
m = 0;
}
BP只是表格中的一个变量。如我所见,它没有显示在您的表单中的任何位置。为什么你需要它的位图。 您可以这样做,只需获取表单的图形,然后使用该图形进行绘制。 https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx
注意: 你需要在窗体的PaintEvent上做,否则下一次重绘后你的绘图将被删除,所以你需要一些变量来存储你所有的线条, 然后在 paint 事件中绘制它们。
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.FillRectangle(myBrush, new Rectangle(0, 0, 200, 300));
myBrush.Dispose();
formGraphics.Dispose();
已更新: 如果要将更改保存到位图。您可以使用 Form.DrawToBitmap 将表单中的绘图保存为位图,然后调用 bitmap.Save() 到目录中的文件。