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