问题描述
你好,
我正在创建一个软件,在我要在单击鼠标的地方在图片框上绘制圆圈之后,将图片(指纹)加载到图片框中.我在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中的鼠标单击事件上绘制圆的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!