我在网上找到了这个代码,我想用它在我的绘图上画一个小蓝框。但是当我点击图片框时会出现蓝框,但是它重绘了我的整个图片框,这是一个问题,因为我有一个非常复杂的图片,而且需要几秒钟才能重绘。 Invalidate有什么办法吗?也许是一个图片框里面的图片框,backpicturebox是我复杂的绘图,而frontpicturebox是蓝色框的刷新?我似乎无法让前面的picturebox backgroundcolor透明,任何人都可以帮助我吗?
private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
// Determine the initial rectangle coordinates...
if (MeasureMentimported && !selectieBezig)
{
RectStartPoint = e.Location;
//Invalidate();
selectieBezig = true;
}
}
// Draw Rectangle
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
//Als er niet links wordt geklikt, dan gewoon weer terug.
if (e.Button != MouseButtons.Left)
return;
//Alleen als de measurementfile is geladen, gaan we kijken of er iets te selecteren valt.
if (MeasureMentimported && selectieBezig)
{
Point tempEndPoint = e.Location;
int X1 = Math.Min(RectStartPoint.X, tempEndPoint.X);
int Y1 = Math.Min(RectStartPoint.Y, tempEndPoint.Y);
int X2 = Math.Max(RectStartPoint.X, tempEndPoint.X);
int Y2 = Math.Max(RectStartPoint.Y, tempEndPoint.Y);
Rect.Location = new Point(X1, Y1);
Rect.Size = new Size(X2 - X1, Y2 - Y1);
picTekenvlak.Invalidate();
//Rect.Location = new Point(
// Math.Min(RectStartPoint.X, tempEndPoint.X),
// Math.Min(0, 1000));
//Rect.Size = new Size(
// Math.Abs(RectStartPoint.X - tempEndPoint.X),
// Math.Abs(1000));
// MessageBox.Show("k");
}
}
// Draw Area
//
private void pictureBox1_Paint1(object sender, System.Windows.Forms.PaintEventArgs e)
{
if (MeasureMentimported)
{
if (Rect != null && Rect.Width > 0 && Rect.Height > 0)
{
e.Graphics.FillRectangle(selectionBrush, Rect);
}
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
selectieBezig = false;
if (e.Button == MouseButtons.Right)
{
if (Rect.Contains(e.Location))
{
Console.WriteLine("Right click");
}
}
}
答案 0 :(得分:0)
OnPaint
事件会发送一个PaintEventArgs
对象,该对象根据PaintEventArgs.ClipRectangle
描述重绘的次数。您可以通过在调用Invalidate
。
然后,您需要使用这些坐标来确定重绘的程度。这也会减少您的应用程序对任何类型的叠加所做的数量,例如在PictureBox上拖动另一个应用程序等。
您可能想尝试将复杂图像绘制到Bitmap
,然后将该位图指定给PictureBox.Image
。我不知道这是否会起作用,因为您直接在PictureBox
图像表面上绘图,但是如果您可以使其工作,Windows将处理裁剪以为您渲染图像,这是理想的。