C# Winfrom pictureBox读取图片问题

时间:2023-01-21 01:00:14
C# Winfrom pictureBox读取图片问题

C# Winfrom pictureBox读取图片问题

pictureBox读取图片怎么才能实现这种效果。
而且截取的矩形一直在图片内。
求实例。。。


21 个解决方案

#1


怎么在读取图片时 图片太大会按比例缩小显示。
截图矩形怎么只在图片中移动 C# Winfrom pictureBox读取图片问题

#2


你从网上找一个图像处理的源码demo,自己先研究研吧

#3


否则给你贴上一堆代码,你一样不懂
www.codeproject.com,这里面去找

#4


引用 3 楼 bdmh 的回复:
否则给你贴上一堆代码,你一样不懂
www.codeproject.com,这里面去找

有的话 还是贴一下吧。。
C# Winfrom pictureBox读取图片问题

#5


根本没头绪。  求大神 C# Winfrom pictureBox读取图片问题

#6


C# Winfrom pictureBox读取图片问题
自己再顶一下

#7


你直接说想要什么样的功能,看看能不能找到合适的现成控件。
否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?

#8


引用 7 楼 jshi123 的回复:
你直接说想要什么样的功能,看看能不能找到合适的现成控件。
否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?

像设置QQ头像那样的。。

#9


长得和qq类似的控件没有找到。不过qq这个头像制作工具中的很多功能实现方法网上都可以找到,你可以找一下,然后把这些功能组合起来。

比如选择截图区域,技术要点就是跟踪鼠标按下、移动和抬起的事件,在OnPaint事件里画出随鼠标改变大小的矩形,并且填充半透明色和画上虚线格子。
picturebox的SizeMode设成stretch可以让图片缩放到picturebox的大小。
控制矩形不超过图片范围应该很好办,你自己应该能想出办法来。
参考下这篇文章:
http://www.codeproject.com/Articles/406875/Creating-an-image-viewer-in-Csharp-Part-5-Selectin

#10


引用 9 楼 jshi123 的回复:
长得和qq类似的控件没有找到。不过qq这个头像制作工具中的很多功能实现方法网上都可以找到,你可以找一下,然后把这些功能组合起来。

比如选择截图区域,技术要点就是跟踪鼠标按下、移动和抬起的事件,在OnPaint事件里画出随鼠标改变大小的矩形,并且填充半透明色和画上虚线格子。
picturebox的SizeMode设成stretch可以让图片缩放到picturebox的大小。
控制矩形不超过图片范围应该很好办,你自己应该能想出办法来。
参考下这篇文章:
http://www.codeproject.com/Articles/406875/Creating-an-image-viewer-in-Csharp-Part-5-Selectin

唯一的问题就是。
如果我放入pictureBox的图片是不确定的。
有可能长方形有可能正方形。
如果把pictureBox设置成正方形。  那么我长方形填充进去,这样会变形啊。

#11


SizeMode=Zoom

#12


引用 11 楼 jshi123 的回复:
SizeMode=Zoom

C# Winfrom pictureBox读取图片问题
出现了这么一个问题。。
放大了。

还有一个问题  那个截取矩形怎么限制  只能在图片里面。 不能超过图片或者移出图片

#13


SizeMode=CenterImage
x = (pic.Width - pic.Image.Width)/2;
y = (pic.Height - pic.Image.Height)/2;
Rectangle bounds = x, y, width, height;

#14


引用 13 楼 jshi123 的回复:
SizeMode=CenterImage
x = (pic.Width - pic.Image.Width)/2;
y = (pic.Height - pic.Image.Height)/2;
Rectangle bounds = x, y, width, height;

这是做矩形么?

#15


引用 12 楼 u011206051 的回复:
Quote: 引用 11 楼 jshi123 的回复:

SizeMode=Zoom

C# Winfrom pictureBox读取图片问题
出现了这么一个问题。。
放大了。

还有一个问题  那个截取矩形怎么限制  只能在图片里面。 不能超过图片或者移出图片

SizeMode=Zoom只能这么设置。   但是矩形截出来就放大,  这个还是存在。

#16


设置图片不放大:
pic.SizeMode = PictureBoxSizeMode.CenterImage;

计算图片的范围:
x = (pic.Width - pic.Image.Width)/2; // 图片在picturebox中坐上角x坐标
y = (pic.Height - pic.Image.Height)/2; // 图片在picturebox中左上角y坐标
Rectangle bounds = new Rectangle(x,y, pic.Image.Width, pic.Image.Height); // picturebox中图片范围

#17


引用 16 楼 jshi123 的回复:
设置图片不放大:
pic.SizeMode = PictureBoxSizeMode.CenterImage;

计算图片的范围:
x = (pic.Width - pic.Image.Width)/2; // 图片在picturebox中坐上角x坐标
y = (pic.Height - pic.Image.Height)/2; // 图片在picturebox中左上角y坐标
Rectangle bounds = new Rectangle(x,y, pic.Image.Width, pic.Image.Height); // picturebox中图片范围

放入pictureBox中的图片弄好了。  但是矩形看到的图片还是按pictureBox平铺图片的大小获得的。
跟我讲讲思路吧。   代码不一样。   你写这个我用不到。 C# Winfrom pictureBox读取图片问题

#18


先确定要截图的大小,创建一个相应大小的Bitmap。
用var g = Graphics.FromImage(bitmap)得到上述bitmap对应的Graphics
确定要截图的原点和范围,用:
graphics.DrawImage(pictureBox.Image, new Rectangle(原点, 截图大小)) 把屏幕上的图拷到上述bitmap中。

截图原点是相对pictureBox的Image的(也就是相对照片左上角),大小就是拖动鼠标拉出来框的大小。

如果用鼠标按下去时记录的坐标,这个坐标是相对客户区的。比如注册是PictureBox的mousedown事件,那事件中的Location就是相对PictureBox容器的左上角,所以转成相对图片左上角的坐标。

图片左上角的坐标计算方式,如果是CenterImage不缩放,就是上一楼里计算法。
如果是Stretch拉伸方式,就判断:
如果picturebox的纵横比超过image的(图片在容器中上下居中):则原点x=0,y=(pic.height-Image.height)/2
如果picturebox的纵横比小于image的(图片在容器中左右居中):则原点x=(pic.width+image.width)/2,y=0
用相同pic客户区的坐标值减去这个img原点就是截图的左上角位置。



#19


LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点

#20


引用 18 楼 jshi123 的回复:
先确定要截图的大小,创建一个相应大小的Bitmap。
用var g = Graphics.FromImage(bitmap)得到上述bitmap对应的Graphics
确定要截图的原点和范围,用:
graphics.DrawImage(pictureBox.Image, new Rectangle(原点, 截图大小)) 把屏幕上的图拷到上述bitmap中。

截图原点是相对pictureBox的Image的(也就是相对照片左上角),大小就是拖动鼠标拉出来框的大小。

如果用鼠标按下去时记录的坐标,这个坐标是相对客户区的。比如注册是PictureBox的mousedown事件,那事件中的Location就是相对PictureBox容器的左上角,所以转成相对图片左上角的坐标。

图片左上角的坐标计算方式,如果是CenterImage不缩放,就是上一楼里计算法。
如果是Stretch拉伸方式,就判断:
如果picturebox的纵横比超过image的(图片在容器中上下居中):则原点x=0,y=(pic.height-Image.height)/2
如果picturebox的纵横比小于image的(图片在容器中左右居中):则原点x=(pic.width+image.width)/2,y=0
用相同pic客户区的坐标值减去这个img原点就是截图的左上角位置。


C# Winfrom pictureBox读取图片问题
谢谢了。  先结贴了吧
我慢慢研究着。

#21


引用 19 楼 unrulycain 的回复:
LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点

矩形要限制。 不能超过图片啊。

#1


怎么在读取图片时 图片太大会按比例缩小显示。
截图矩形怎么只在图片中移动 C# Winfrom pictureBox读取图片问题

#2


你从网上找一个图像处理的源码demo,自己先研究研吧

#3


否则给你贴上一堆代码,你一样不懂
www.codeproject.com,这里面去找

#4


引用 3 楼 bdmh 的回复:
否则给你贴上一堆代码,你一样不懂
www.codeproject.com,这里面去找

有的话 还是贴一下吧。。
C# Winfrom pictureBox读取图片问题

#5


根本没头绪。  求大神 C# Winfrom pictureBox读取图片问题

#6


C# Winfrom pictureBox读取图片问题
自己再顶一下

#7


你直接说想要什么样的功能,看看能不能找到合适的现成控件。
否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?

#8


引用 7 楼 jshi123 的回复:
你直接说想要什么样的功能,看看能不能找到合适的现成控件。
否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?

像设置QQ头像那样的。。

#9


长得和qq类似的控件没有找到。不过qq这个头像制作工具中的很多功能实现方法网上都可以找到,你可以找一下,然后把这些功能组合起来。

比如选择截图区域,技术要点就是跟踪鼠标按下、移动和抬起的事件,在OnPaint事件里画出随鼠标改变大小的矩形,并且填充半透明色和画上虚线格子。
picturebox的SizeMode设成stretch可以让图片缩放到picturebox的大小。
控制矩形不超过图片范围应该很好办,你自己应该能想出办法来。
参考下这篇文章:
http://www.codeproject.com/Articles/406875/Creating-an-image-viewer-in-Csharp-Part-5-Selectin

#10


引用 9 楼 jshi123 的回复:
长得和qq类似的控件没有找到。不过qq这个头像制作工具中的很多功能实现方法网上都可以找到,你可以找一下,然后把这些功能组合起来。

比如选择截图区域,技术要点就是跟踪鼠标按下、移动和抬起的事件,在OnPaint事件里画出随鼠标改变大小的矩形,并且填充半透明色和画上虚线格子。
picturebox的SizeMode设成stretch可以让图片缩放到picturebox的大小。
控制矩形不超过图片范围应该很好办,你自己应该能想出办法来。
参考下这篇文章:
http://www.codeproject.com/Articles/406875/Creating-an-image-viewer-in-Csharp-Part-5-Selectin

唯一的问题就是。
如果我放入pictureBox的图片是不确定的。
有可能长方形有可能正方形。
如果把pictureBox设置成正方形。  那么我长方形填充进去,这样会变形啊。

#11


SizeMode=Zoom

#12


引用 11 楼 jshi123 的回复:
SizeMode=Zoom

C# Winfrom pictureBox读取图片问题
出现了这么一个问题。。
放大了。

还有一个问题  那个截取矩形怎么限制  只能在图片里面。 不能超过图片或者移出图片

#13


SizeMode=CenterImage
x = (pic.Width - pic.Image.Width)/2;
y = (pic.Height - pic.Image.Height)/2;
Rectangle bounds = x, y, width, height;

#14


引用 13 楼 jshi123 的回复:
SizeMode=CenterImage
x = (pic.Width - pic.Image.Width)/2;
y = (pic.Height - pic.Image.Height)/2;
Rectangle bounds = x, y, width, height;

这是做矩形么?

#15


引用 12 楼 u011206051 的回复:
Quote: 引用 11 楼 jshi123 的回复:

SizeMode=Zoom

C# Winfrom pictureBox读取图片问题
出现了这么一个问题。。
放大了。

还有一个问题  那个截取矩形怎么限制  只能在图片里面。 不能超过图片或者移出图片

SizeMode=Zoom只能这么设置。   但是矩形截出来就放大,  这个还是存在。

#16


设置图片不放大:
pic.SizeMode = PictureBoxSizeMode.CenterImage;

计算图片的范围:
x = (pic.Width - pic.Image.Width)/2; // 图片在picturebox中坐上角x坐标
y = (pic.Height - pic.Image.Height)/2; // 图片在picturebox中左上角y坐标
Rectangle bounds = new Rectangle(x,y, pic.Image.Width, pic.Image.Height); // picturebox中图片范围

#17


引用 16 楼 jshi123 的回复:
设置图片不放大:
pic.SizeMode = PictureBoxSizeMode.CenterImage;

计算图片的范围:
x = (pic.Width - pic.Image.Width)/2; // 图片在picturebox中坐上角x坐标
y = (pic.Height - pic.Image.Height)/2; // 图片在picturebox中左上角y坐标
Rectangle bounds = new Rectangle(x,y, pic.Image.Width, pic.Image.Height); // picturebox中图片范围

放入pictureBox中的图片弄好了。  但是矩形看到的图片还是按pictureBox平铺图片的大小获得的。
跟我讲讲思路吧。   代码不一样。   你写这个我用不到。 C# Winfrom pictureBox读取图片问题

#18


先确定要截图的大小,创建一个相应大小的Bitmap。
用var g = Graphics.FromImage(bitmap)得到上述bitmap对应的Graphics
确定要截图的原点和范围,用:
graphics.DrawImage(pictureBox.Image, new Rectangle(原点, 截图大小)) 把屏幕上的图拷到上述bitmap中。

截图原点是相对pictureBox的Image的(也就是相对照片左上角),大小就是拖动鼠标拉出来框的大小。

如果用鼠标按下去时记录的坐标,这个坐标是相对客户区的。比如注册是PictureBox的mousedown事件,那事件中的Location就是相对PictureBox容器的左上角,所以转成相对图片左上角的坐标。

图片左上角的坐标计算方式,如果是CenterImage不缩放,就是上一楼里计算法。
如果是Stretch拉伸方式,就判断:
如果picturebox的纵横比超过image的(图片在容器中上下居中):则原点x=0,y=(pic.height-Image.height)/2
如果picturebox的纵横比小于image的(图片在容器中左右居中):则原点x=(pic.width+image.width)/2,y=0
用相同pic客户区的坐标值减去这个img原点就是截图的左上角位置。



#19


LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点

#20


引用 18 楼 jshi123 的回复:
先确定要截图的大小,创建一个相应大小的Bitmap。
用var g = Graphics.FromImage(bitmap)得到上述bitmap对应的Graphics
确定要截图的原点和范围,用:
graphics.DrawImage(pictureBox.Image, new Rectangle(原点, 截图大小)) 把屏幕上的图拷到上述bitmap中。

截图原点是相对pictureBox的Image的(也就是相对照片左上角),大小就是拖动鼠标拉出来框的大小。

如果用鼠标按下去时记录的坐标,这个坐标是相对客户区的。比如注册是PictureBox的mousedown事件,那事件中的Location就是相对PictureBox容器的左上角,所以转成相对图片左上角的坐标。

图片左上角的坐标计算方式,如果是CenterImage不缩放,就是上一楼里计算法。
如果是Stretch拉伸方式,就判断:
如果picturebox的纵横比超过image的(图片在容器中上下居中):则原点x=0,y=(pic.height-Image.height)/2
如果picturebox的纵横比小于image的(图片在容器中左右居中):则原点x=(pic.width+image.width)/2,y=0
用相同pic客户区的坐标值减去这个img原点就是截图的左上角位置。


C# Winfrom pictureBox读取图片问题
谢谢了。  先结贴了吧
我慢慢研究着。

#21


引用 19 楼 unrulycain 的回复:
LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点

矩形要限制。 不能超过图片啊。