SizeMode=Zoom
长得和qq类似的控件没有找到。不过qq这个头像制作工具中的很多功能实现方法网上都可以找到,你可以找一下,然后把这些功能组合起来。 比如选择截图区域,技术要点就是跟踪鼠标按下、移动和抬起的事件,在OnPaint事件里画出随鼠标改变大小的矩形,并且填充半透明色和画上虚线格子。 picturebox的SizeMode设成stretch可以让图片缩放到picturebox的大小。 控制矩形不超过图片范围应该很好办,你自己应该能想出办法来。 参考下这篇文章: http://www.codeproject.com/Articles/406875/Creating-an-image-viewer-in-Csharp-Part-5-Selectin
LZ做过就会明白, 把矩形区域扩大到图片以外的区域反而麻烦一点
先确定要截图的大小,创建一个相应大小的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原点就是截图的左上角位置。
设置图片不放大: 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中图片范围
[quote=引用 11 楼 jshi123 的回复:] SizeMode=Zoom
SizeMode=CenterImage x = (pic.Width - pic.Image.Width)/2; y = (pic.Height - pic.Image.Height)/2; Rectangle bounds = x, y, width, height;
你直接说想要什么样的功能,看看能不能找到合适的现成控件。 否则,看你贴出来的两幅图,哪里是什么从picturebox读取图片能解决问题的?
否则给你贴上一堆代码,你一样不懂 www.codeproject.com,这里面去找
17,740
社区成员
24,334
社区内容
加载中
试试用AI创作助手写篇文章吧