问题描述
我用PictureBox打开一张图,假如尺寸是800px*600px,我现在需要在PictureBox中的这张图截取一部分,换句话说,我需要这张图的中间一部分,如果用Rectangle(x,y,width,height)来说明的话,原图是Rectangle(0,0,800,600),我现在需要截取出来Rectangle(300,100,400,200)这么一个区域的图像并保存。我是在解决不了了,烦请各位大神出手相救
解决方案
解决方案二:
1计算PictureBox和实际Image的比例(楼主的示例中为1:1)2根据这个比例关系计算PictureBox控件上选取的点映射到PictureBox.Image中的实际坐标3用GDI+中的DrawImage函数截取出需要的图片4用Save函数保存。
解决方案三:
更正,如果图片和空间尺寸都是800*600才是1:1
解决方案四:
根据PictureBox的设置不同,图像有可能被拉伸所以应该截取原图(image),而不是PictureBox控件显示的图像比例需要自己算
解决方案五:
看下我博客里面那个拼图游戏的demo,那个有等比例截图的代码的
解决方案六:
Imagesource=PictureBox.Image;Rectanglerect=newRectangle(300,100,400,200);Bitmapbmp=newBitmap(rect.Width,rect.Height);Graphicsg=Graphics.FromImage(bmp);RectanglerectDes=newRectangle(0,0,bmp.Width,bmp.Height);g.DrawImage(source,rectDes,rect,GraphicsUnit.Pixel);bmp.Save("C:\test.jpg",ImageFormat.Jpeg);
解决方案七:
首先感谢几位大神的帮助,尤其是5楼的代码,相当有用,但是测试中问题来了,5楼的代码在图片与控件尺寸1:1的时候能用,当然就算不是1:1的时候也可以用,那就是需要像1楼上说的计算映射比例的问题,但是我想要的最终效果是另外一种,想了一早晨还是没做出来,我也许太笨了。其实我最终需要的是一个像PS那样的裁切功能,通过代码改变PictureBox的大小,然后在一个固定大小的窗口中适应,到了我满意的时候,我可以拖拽PictureBox移动,换句话说,就是相机的取景框的意思,随着我相机的移动,取景框中的图像是不一样的,当我按下快门的时候,相机所记录的是我取景框的图像,并且像素尺寸是固定的,回过头来说,我在取景框中把PictureBox中的部分图像选择好,我现在要通过程序生成一个新图像,固定大小。原图:800px*600px取景框:320px*280px需求:等比缩放原图或者截取部分缩放
解决方案八:
不太明白你的意思,不知道PictureBox的SizeMode设置为:AutoSize是不是你要的效果。当然为了界面好看,你可能还要在PictureBox外面套个Panel什么的。
解决方案九:
这次在度娘找到一个插值算法,基本可行,回来我把代码完善一下,发上来,和大家分享,到时候再结贴,其实qbilbo大哥你就差一个插值算法了,加上那个基本上就是我想要的结果了
解决方案十:
///<summary>///获取等比例缩放的图片(高宽不一致时获取最中间部分的图片)///</summary>///<paramname="fromImage"></param>///<paramname="width">要获取的宽度</param>///<paramname="height">要获取的高度</param>///<returns></returns>publicstaticImageAdjImageToFitSize(thisImagefromImage,intwidth,intheight){Bitmapbitmap=newBitmap(width,height);Graphicsgraphics=Graphics.FromImage(bitmap);Pointpoint=newPoint(0,0);Pointpoint2=newPoint(width,0);Pointpoint3=newPoint(0,height);Point[]destPoints=newPoint[]{point,point2,point3};Rectanglerect=GetImageRectangle(fromImage);graphics.DrawImage(fromImage,destPoints,rect,GraphicsUnit.Pixel);Imageimage=Image.FromHbitmap(bitmap.GetHbitmap());bitmap.Dispose();graphics.Dispose();returnimage;}privatestaticRectangleGetImageRectangle(ImagefromImage){//居中位置获取intx=0;inty=0;intheight=fromImage.Height;intwidth=fromImage.Width;if(fromImage.Height>fromImage.Width){height=fromImage.Width;y=(fromImage.Height-fromImage.Width)/2;}else{width=fromImage.Height;x=(fromImage.Width-fromImage.Height)/2;}returnnewRectangle(x,y,width,height);}
让你参考你就是不肯参考啊……
解决方案十一:
引用9楼starfd的回复:
让你参考你就是不肯参考啊……
楼主是懒的他就希望拖个控件,设置几个属性,然后就能实现裁剪,移动裁剪位置这样的功能
解决方案十二:
看样子像是自定义选区截图,网上有例子的