C# Winfrom pictureBox读取图片问题

姑娘出来我爬山坡 2013-08-29 11:28:45




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


...全文
714 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2013-09-05
  • 打赏
  • 举报
回复
SizeMode=CenterImage x = (pic.Width - pic.Image.Width)/2; y = (pic.Height - pic.Image.Height)/2; Rectangle bounds = x, y, width, height;
  • 打赏
  • 举报
回复
引用 11 楼 jshi123 的回复:
SizeMode=Zoom


出现了这么一个问题。。
放大了。

还有一个问题 那个截取矩形怎么限制 只能在图片里面。 不能超过图片或者移出图片
jshi123 2013-09-05
  • 打赏
  • 举报
回复
SizeMode=Zoom
  • 打赏
  • 举报
回复
引用 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设置成正方形。 那么我长方形填充进去,这样会变形啊。
  • 打赏
  • 举报
回复
引用 19 楼 unrulycain 的回复:
LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点
矩形要限制。 不能超过图片啊。
  • 打赏
  • 举报
回复
引用 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原点就是截图的左上角位置。
谢谢了。 先结贴了吧 我慢慢研究着。
「已注销」 2013-09-05
  • 打赏
  • 举报
回复
LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点
jshi123 2013-09-05
  • 打赏
  • 举报
回复
先确定要截图的大小,创建一个相应大小的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原点就是截图的左上角位置。
  • 打赏
  • 举报
回复
引用 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平铺图片的大小获得的。 跟我讲讲思路吧。 代码不一样。 你写这个我用不到。
jshi123 2013-09-05
  • 打赏
  • 举报
回复
设置图片不放大: 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中图片范围
  • 打赏
  • 举报
回复
引用 12 楼 u011206051 的回复:
[quote=引用 11 楼 jshi123 的回复:] SizeMode=Zoom
出现了这么一个问题。。 放大了。 还有一个问题 那个截取矩形怎么限制 只能在图片里面。 不能超过图片或者移出图片[/quote] SizeMode=Zoom只能这么设置。 但是矩形截出来就放大, 这个还是存在。
  • 打赏
  • 举报
回复
引用 13 楼 jshi123 的回复:
SizeMode=CenterImage x = (pic.Width - pic.Image.Width)/2; y = (pic.Height - pic.Image.Height)/2; Rectangle bounds = x, y, width, height;
这是做矩形么?
jshi123 2013-09-04
  • 打赏
  • 举报
回复
你直接说想要什么样的功能,看看能不能找到合适的现成控件。 否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?
jshi123 2013-09-04
  • 打赏
  • 举报
回复
长得和qq类似的控件没有找到。不过qq这个头像制作工具中的很多功能实现方法网上都可以找到,你可以找一下,然后把这些功能组合起来。 比如选择截图区域,技术要点就是跟踪鼠标按下、移动和抬起的事件,在OnPaint事件里画出随鼠标改变大小的矩形,并且填充半透明色和画上虚线格子。 picturebox的SizeMode设成stretch可以让图片缩放到picturebox的大小。 控制矩形不超过图片范围应该很好办,你自己应该能想出办法来。 参考下这篇文章: http://www.codeproject.com/Articles/406875/Creating-an-image-viewer-in-Csharp-Part-5-Selectin
  • 打赏
  • 举报
回复
引用 7 楼 jshi123 的回复:
你直接说想要什么样的功能,看看能不能找到合适的现成控件。 否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?
像设置QQ头像那样的。。
  • 打赏
  • 举报
回复
自己再顶一下
  • 打赏
  • 举报
回复
根本没头绪。 求大神
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
否则给你贴上一堆代码,你一样不懂 www.codeproject.com,这里面去找
有的话 还是贴一下吧。。
bdmh 2013-08-29
  • 打赏
  • 举报
回复
否则给你贴上一堆代码,你一样不懂 www.codeproject.com,这里面去找
bdmh 2013-08-29
  • 打赏
  • 举报
回复
你从网上找一个图像处理的源码demo,自己先研究研吧
加载更多回复(1)

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧