由于我尝试使用位图绘制,因此C#绘图程序不会在屏幕上创建任何行

时间:2016-12-15 01:54:02

标签: c# bitmap panel draw paint

这是我的源代码。当我按下按钮移动鼠标时,我似乎无法获得位图来显示面板上绘制的线条。沮丧并寻找帮助我完成代码的人,这样我就可以为我的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;
        }

1 个答案:

答案 0 :(得分:1)

BP只是表格中的一个变量。正如我所看到的,它不会显示在表单的任何位置。为什么你需要一个位图。 您可以执行以下操作,只需获取表单的图形,然后使用该图形进行绘制。 https://msdn.microsoft.com/en-us/library/ztxk24yx(v=vs.110).aspx

注意:您需要在表单的PaintEvent上执行此操作,否则您的绘图将在下次重绘后删除,因此您需要一些变量来存储所有行,然后绘制所有他们在油漆事件中。

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()调用到目录中的文件。