需要有关在PictureBox中的鼠标单击事件上绘制圆的帮助 [英] Need help with drawing circles on mouse click event in pictureBox

查看:72
本文介绍了需要有关在PictureBox中的鼠标单击事件上绘制圆的帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,

我正在创建一个软件,在我要在单击鼠标的地方在图片框上绘制圆圈之后,将图片(指纹)加载到图片框中.我在pictureBox1 MouseDown(用于单击)和Paint(用于绘图)上创建了事件.当我加载表单并单击pictureBox1时,什么也没有发生,没有绘制任何圆,但是在我将图像加载到pictureBox1中后,所有应该绘制的圆都出现在具有已加载图像的picturebox上.如果我在加载图像后单击图片框,则不会绘制任何内容,只有重新加载图像时才会出现新的圆圈.我究竟做错了什么?

感谢您的回答

这是我的代码和屏幕截图:

屏幕截图

Hello,

i am creating a software, which loads image(fingerprint) in picture box after i want to draw circles on the picturebox on the place i have clicked mouse. I created events on pictureBox1 MouseDown(for clicking) and Paint(for drawing). When i load my form and click on pictureBox1 nothing happens, no circles are drawn, BUT after i load image in pictureBox1 all the circles that should have been drawn before appear on picturebox with loaded image. If i click on picturebox after loading image nothing gets drawn and only if re-load image new circles appear. What am i doing wrong?

Thanks for answer

here is my code and screenshot:

Screenshot

namespace fingerprint_test_v04
{
    public partial class Form1 : Form
    {
        private ArrayList myPts = new ArrayList();
        private Bitmap img = null;

        public Form1()
        {
            InitializeComponent();
            //CenterToScreen();
            this.Text = "FingerprintzzzZZzzZZzzz";

        }

        public void MyPaintHandler(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
        }


        private void openFPR2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog open = new OpenFileDialog();
                open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
                if (open.ShowDialog() == DialogResult.OK)
                {
                    pictureBox2.Image = img;
                    img = new Bitmap(open.FileName);
                }
            }
            catch (Exception)
            {
                throw new ApplicationException("Failed loading image");
            }
        }

        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog open = new OpenFileDialog();
                open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp";
                if (open.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image = img;
                    img = new Bitmap(open.FileName);
                    angle.Enabled = true;
                    angle_ValueChanged(null, EventArgs.Empty);
                }
            }
            catch (Exception)
            {
                throw new ApplicationException("Failed loading image");
            }
        }

        private void angle_ValueChanged(object sender, System.EventArgs e)
        {
            if (angle.Value > 359.9m)
            {
                angle.Value = 0;
                return;
            }

            if (angle.Value < 0.0m)
            {
                angle.Value = 359;
                return;
            }

            Image oldImage = pictureBox1.Image;
            pictureBox1.Image = Program.RotateImage(img, (float)angle.Value);

            if (oldImage != null)
            {
                oldImage.Dispose();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Paint += new PaintEventHandler(this.pictureBox1_Paint);
            this.Controls.Add(pictureBox1);
            
        }


        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromHwnd(this.Handle);
            myPts.Add(new Point(e.X, e.Y));
            Invalidate(); 
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            foreach (Point p in myPts)
                g.DrawEllipse(new Pen(Color.Red, 3), p.X, p.Y, 10, 10);
        }

     }
}

推荐答案

绘制后刷新图片框:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    foreach (Point p in myPts)
        g.DrawEllipse(new Pen(Color.Red, 3), p.X, p.Y, 10, 10);
    (sender as PictureBox).Refresh();
}


这篇关于需要有关在PictureBox中的鼠标单击事件上绘制圆的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆