1
我試圖旋轉用相機拍攝的2448x3264的UIImage。當我這樣做時,內存大約120Mb,大致3/4秒,然後恢復到正常狀態。問題在於,在內存較少的設備(例如ipod touch)中,應用程序崩潰。即使沒有,我也不認爲它應該爲一張圖片使用那麼多的內存。發生這種情況時,Iphone 5也落後了。CG光柵數據對於一個圖像太大
根據this回答一個評論,使用UIGraphicsGetCurrentContext()應該是寬度之後在所述解壓縮存儲器的字節大小×高度×CGImageGetBitsPerComponent(image.CGImage)/ 8個字節,因此圖像應占據8MB,不120 。
任何想法爲什麼發生這種情況,以及如何解決它?
這裏的UIImage的caterogy方法返回一個旋轉的圖像:
- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees {
CGFloat radian = (CGFloat) (degrees * (M_PI/ 180.0f));
CGSize rotatedSize = [self rotatedImageSize:degrees];
// Create the bitmap context
UIGraphicsBeginImageContextWithOptions(rotatedSize, NO, 0);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
CGPoint contextCenter = CGPointMake(rotatedSize.width/2.0f,
rotatedSize.height/2.0f);
CGContextTranslateCTM(bitmap, contextCenter.x, contextCenter.y);
// // Rotate the image context
CGContextRotateCTM(bitmap, radian);
// Now, draw the rotated/scaled image into the context
[self drawInRect:CGRectMake(-self.size.width/2.0f, -
self.size.height/2.0f, self.size.width, self.size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
下面是儀器證明柵格數據是什麼導致內存高峯期,只是在執行rotate方法: