2010-12-18 56 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!)