2010-12-18 57 views
10

我想从UIImage中抓取子图像。我环顾四周寻找类似的问题,但无济于事。从UIImage返回子图像

我知道我想抓取的像素范围 - 如何从现有图像返回此子图像?

回答

25

这应有助于:http://iphonedevelopment.blogspot.com/2010/11/drawing-part-of-uiimage.html

这段代码是创建的UIImage一个类别,但该代码应该很容易修改而不它是一个类的工作。

做同样的事情的短方法如下:

CGRect fromRect = CGRectMake(0, 0, 320, 480); // or whatever rectangle 

CGImageRef drawImage = CGImageCreateWithImageInRect(image.CGImage, fromRect); 
UIImage *newImage = [UIImage imageWithCGImage:drawImage]; 
CGImageRelease(drawImage); 

希望这有助于!

+0

这种方式应该主线程下运行,它不是线程安全的方法。 – AechoLiu 2010-12-18 01:17:53

+0

这对于视网膜设备不起作用,因为它会剪切原始图像而不是视网膜屏幕中的图像(例如,如果320x480是正常图像和640x960原始图像的视网膜分辨率,则CGRect会带有(0,0 ,320,480)会在视网膜上切出图像的左上四分之一) – ohcibi 2013-10-07 16:37:58

+4

@ohcibi为了使这个coed也可以与视网膜一起工作,您需要获得图像的缩放因子('image.scale'),应用它到矩形(乘以所有数值),当创建最后的'UIImage'时,使用'imageWithCGImage:scale:orientation:'方法再次设置正确的比例因子。 – Mecki 2014-12-03 12:38:50

3

为SWIFT 3更新@donkim答案:

let fromRect=CGRect(x:0,y:0,width:320,height:480) 
    let drawImage = image.cgImage!.cropping(to: fromRect) 
    let bimage = UIImage(cgImage: drawImage!)