C#之PictureBoxコントロールに点を描く

9353 ワード

C#之PictureBoxコントロールに点を描く


PictureBoxコントロールでマウスを左クリックするたびにポイントを描くにはどうすればいいですか?ここでは2つの方法をまとめた.まずフォームにPictureBoxコントロールとButtonボタンを挿入し、ボタンをクリックするとマウスがPictureBoxコントロールに入り、左クリックごとに点を描きます.1つ目の方法:GDI+を利用して、コードは以下の通りです.
        private string sType;// button Name

        private void btnDrawPoint_Click(object sender, EventArgs e)
        {
     
            sType = "btnDrawPoint";// button Name
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
     
            Graphics g = pictureBox1.CreateGraphics();// 
            if (sType == "btnDrawPoint")
            {
     
                if (e.Button == MouseButtons.Left)
                {
     
                    g.FillEllipse(Brushes.Red, e.X, e.Y, 4, 4);
                }
            }
        }

第2の方法:gdi 32を呼び出す.dllライブラリのSetPixelメソッド.コードは次のとおりです.
        [DllImport("gdi32.dll")]
        private static extern int SetPixel(IntPtr hdc, int x1, int y1, int color);

        private string sType;// button Name

        private void btnDrawPoint_Click(object sender, EventArgs e)
        {
     
            sType = "btnDrawPoint";// button Name
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
     
            Graphics g = pictureBox1.CreateGraphics();// 
            PointF p = new PointF(e.X, e.Y);// , x,y

            if (sType == "btnDrawPoint")
            {
     
                if (e.Button == MouseButtons.Left)
                {
     
                    DrawPoint(g, p);// , 
                }
            }
        }

        public void DrawPoint(Graphics g, PointF p)
        {
     
            IntPtr hdc = g.GetHdc();

            int color = 255;// ,255 

            SetPixel(hdc, (int)p.X, (int)p.Y, color);
            g.ReleaseHdc();
        }

2つ目の方法は、描く点が非常に小さく、よく見なければ見えないので、2つ目の方法で描くことをお勧めしませんが、1つ目の方法は便利で、描く点が明らかです.