//....................//....................................
Image<Bgr, Byte> img=null;
//
private bool mouseStatus = false;//鼠标状态,false为松开
private Point startPoint;//鼠标按下的点
private Point endPoint;//
private Rectangle currRect;//当前正在绘制的举行
private int minStartX, minStartY, maxEndX, maxEndY;//
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (img != null)
{
mouseStatus = true;
startPoint.X = e.X;
startPoint.Y = e.Y;
//重新一个矩形,重置最大重绘矩形的上下左右的坐标
minStartX = e.X;
minStartY = e.Y;
maxEndX = e.X;
maxEndY = e.Y;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if ( mouseStatus)
{
endPoint.X = e.X;
endPoint.Y = e.Y;
//这一段是获取要绘制矩形的上下左右的坐标,如果不这样处理的话,只有从左上开始往右下角才能画出矩形。
//这样处理的话,可以任意方向,当然中途可以更换方向。
int realStartX = Math.Min(startPoint.X, endPoint.X);
int realStartY = Math.Min(startPoint.Y, endPoint.Y);
int realEndX = Math.Max(startPoint.X, endPoint.X);
int realEndY = Math.Max(startPoint.Y, endPoint.Y);
minStartX = Math.Min(minStartX, realStartX);
minStartY = Math.Min(minStartY, realStartY);
maxEndX = Math.Max(maxEndX, realEndX);
maxEndY = Math.Max(maxEndY, realEndY);
currRect = new Rectangle(realStartX, realStartY, realEndX - realStartX, realEndY - realStartY);
img.Draw(currRect, new Bgr(Color.Red), 1);
pictureBox1.Image = img.Bitmap;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
mouseStatus = false;
endPoint.X = e.X;
endPoint.Y = e.Y;
}
以上是鼠标操作的代码。
运行后,画矩形时生成了很多重绘的矩形,有什么方法把他们去除掉吗?
这个以前是用c++作的,那会可以用透明画刷把它重绘掉,到c#里还真不知道怎么搞了。大家有什么号办法不?
8 个解决方案
#1
自己顶,求解惑啊。。。
#2
自己顶,求解惑啊。。。
#3
写错事件了。。
#4
晕 这回答的~~ 求解答啊 求解答~~
#5
帖子又沉了,。。Help~~~~~
#6
#7
关键字 this.Invalidate();_Paint
#8
this.Invalidate();具体要怎么用呢??paint事件里面?
#1
自己顶,求解惑啊。。。
#2
自己顶,求解惑啊。。。
#3
写错事件了。。
#4
晕 这回答的~~ 求解答啊 求解答~~
#5
帖子又沉了,。。Help~~~~~
#6
#7
关键字 this.Invalidate();_Paint
#8
this.Invalidate();具体要怎么用呢??paint事件里面?