0
在我的表格中,我有一个图片框。我希望能够在图像上绘制箭头。我设法在一半。在表单加载事件中,我将一个图像分配给图片框。我可以用下面的代码创建箭头。问题是每次创建箭头时,我在表单加载事件上分配的图片都会被擦除。为什么我的图像被擦除?如何在绘制箭头的同时保持我在图像加载时分配的图像?在画上时保留图片盒的图像
private bool isMoving = false;
private Point mouseDownPosition = Point.Empty;
private Point mouseMovePosition = Point.Empty;
private List<Tuple<Point, Point>> lines = new List<Tuple<Point, Point>>();
Pen _Pen;
private void Test_Load(object sender, EventArgs e)
{
pictureBox1.Image = Properties.Resources.background;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (isMoving)
{
if (pictureBox1.Image == null)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
}
pictureBox1.Image = bmp;
}
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.Clear(pictureBox1.BackColor);
AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5);
_Pen = new Pen(Color.IndianRed, 3);
_Pen.CustomEndCap = bigArrow;
g.DrawLine(_Pen, mouseDownPosition, mouseMovePosition);
_Pen.Dispose();
}
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
isMoving = true;
mouseDownPosition = e.Location;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isMoving)
{
mouseMovePosition = e.Location;
pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (isMoving)
{
lines.Add(Tuple.Create(mouseDownPosition, mouseMovePosition));
}
isMoving = false;
}
我认为这个问题是与这条线在这里g.Clear(pictureBox1.BackColor);
嗨樱,这个工作。谢谢!这将保留背景图像并在其上绘制箭头,但是您知道为什么图像箱图像不等于背景图片上方的绘制箭头吗?我测试这个的方式是我把另一个picturebox控件放在我的表单中,只写了'picturebox2.image = picturebox1.image',它只显示我的背景图片。 – taji01
将if(pictureBox1.Image == null)'更改为'if((sender as PictureBox).Image == null)'。无论如何,我不清楚你的评论。如果可能的话,用新代码编辑你的问题,我会看看我是否可以帮助 – Sakura
嗨樱,我在这里更详细地询问了我跑过的测试的问题。 https://stackoverflow.com/questions/46592322/paint-drawline-image-into-picturebox-image – taji01