请问c# 中如何实现在PictureBox中通过鼠标拖拽画出矩形框呢?picturebox中的MouseDown和MouseMove如何使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问c# 中如何实现在PictureBox中通过鼠标拖拽画出矩形框呢?picturebox中的MouseDown和MouseMove如何使用相关的知识,希望对你有一定的参考价值。

参考技术A 楼上回答可完成画矩形框的功能,在判断大小是可以使用Math.Max和Math.Min来确定到底哪个坐标大 参考技术B MouseDown、MouseMove、MouseUp方法有个参数MouseEventArgs e
通过e.X可以得到鼠标当前X坐标,e.Y得到鼠标当前Y坐标。
只需在MouseDown时候,记录下鼠标的x,y坐标,在MouseUp时记录下鼠标x,y坐标。即可画出矩形:
private Point start = new Point();//矩形起点
private Point end = new Point();//矩形终点
private bool blnDraw = false;//是否开始画矩形
Graphics g;
//鼠标按下
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

g = this.pictureBox1.CreateGraphics();
start.X = e.X;
start.Y = e.Y;
end.X = e.X;
end.Y = e.Y;
blnDraw = true;

//鼠标释放
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)

g.DrawRectangle(new Pen(Color.Blue), start.X, start.Y, e.X - start.X, e.Y - start.Y);
blnDraw = false;

//鼠标移动
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

if (blnDraw)

//先擦除
g.DrawRectangle(new Pen(Color.White), start.X, start.Y, end.X - start.X, end.Y - start.Y);
end.X = e.X;
end.Y = e.Y;
//再画
g.DrawRectangle(new Pen(Color.Blue), start.X, start.Y, end.X - start.X, end.Y - start.Y);



整个过程中,我没有判断鼠标按下位置和释放位置的关系。其实应当保证end.X-start.X和end.Y - start.Y为正数,才能正确画出矩形,请楼主自行补下判断代码本回答被提问者和网友采纳

我要用C#实现对图像的缩放、鼠标拖曳和灰度拉伸等功能,且图像可能非常大,请问我该使用picturebox控件吗

我的图像格式是tiff或者RAW的,非常大,用picturebox控件会不会导致内存不足啊,不用能实现吗,应该采用什么类来实现比较好呢?我是新手,希望多指教!不胜感激!
我需要用自己的算法对tiff和RAW文件的每个像素进行操作从而进行缩放和拉伸,主要难点是怎么处理tiff和RAW这两种文件格式,希望有过这方面经验的前辈多指教!先谢了!

参考技术A 当然可以用Picturebox来装图片,如果图片很多的话建议还是不要放太多个的picturebox,可以试试Imagelist来装载,然后证书取每一张就让picturebox显示。追问

谢谢,我现在的问题是不知道怎么处理tif和RAW这两种文件格式~~

参考技术B wpf hlsl 百度之
基于hlsl的高级着色语言就是使用像素着色器进行处理像素,其流程就是对每个像素自己操作。,并且是在显卡执行,能有效解决性能问题,至于你说的文件大,可以使用内存映射文件,速度绝对有保障追问

谢谢,不过可能我没说明白,我主要的问题在于怎么处理tif和RAW这两种文件格式~~

追答

使用FormatConvertedBitmap bitmap = new FormatConvertedBitmap();

参考技术C 这个据说要用opencv技术来处理,那个我没怎么研究过没,给你个参考链接
for C#

参考资料:http://blog.csdn.net/caiye917015406/article/details/7267467

来自:求助得到的回答本回答被提问者采纳
参考技术C 可以的。追问

你好,能不能说详细点啊,最佳选择是用什么实现呢

追答

picturebox 这个控件就是用来放图片的。我想问一下你这个到底是要实现什么效果呢?

追问

我大概知道picturebox的用途,我想实现对图像的缩放和鼠标拖曳,不过我图像非常大,且对缩放要求比较高,我还需要把缩放后的数据发送出去,我怕内存不够!

追答

这个控件可以实现对于图片的拖拽和缩放。至于发送,我建议还是用发送文件的方式。

以上是关于请问c# 中如何实现在PictureBox中通过鼠标拖拽画出矩形框呢?picturebox中的MouseDown和MouseMove如何使用的主要内容,如果未能解决你的问题,请参考以下文章

请问C# winform使用pcitruebox控件查看图片如何实现放大,缩小功能?

在 C# 中通过鼠标拖动来移动控件

在c#中如何对picturebox设置一个滚动条啊

C#:如何在 SplitContainer 面板中包含的 PictureBox 中添加两个滚动条

C# picturebox 用法

c# winform如何取得一个区域的所有控件对象