我寫了一個小功能來放大2x。但是當我運行它時會出現EXC_BAD_ACCESS錯誤。以下是密碼爲我的功能提供EXC_BAD_ACCESS的iOS
- (CGImageRef)CGImageScale2x:(CGImageRef)imgRef
{
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGRect imgRect = CGRectMake(0, 0, width, height);
CGAffineTransform transform = CGAffineTransformMakeScale(2.0, 2.0);
CGRect scaledRect = CGRectApplyAffineTransform(imgRect, transform);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bmContext = CGBitmapContextCreate(NULL,
scaledRect.size.width,
scaledRect.size.height,
8,
0,
colorSpace,
kCGImageAlphaPremultipliedFirst);
CGContextSetAllowsAntialiasing(bmContext, FALSE);
CGContextSetInterpolationQuality(bmContext, kCGInterpolationNone);
CGColorSpaceRelease(colorSpace);
CGContextScaleCTM(bmContext, 2.0, 2.0);
CGContextDrawImage(bmContext, CGRectMake(0, 0,
scaledRect.size.width,
scaledRect.size.height),
imgRef);
CGImageRef scaledImage = CGBitmapContextCreateImage(bmContext);
CFRelease(bmContext);
[(id)scaledImage autorelease];
return scaledImage;
}
我是iOS新手。請幫忙。
感謝
嗯,對於一件事,你通過傳遞0作爲「CGBitmapContextCreate」的第五個參數並且爲另一個你不能自動釋放CG對象而說「我的上下文每行有零個字節」。不要嘗試。 – borrrden
@borrrden嗨,我正在修改一個已經工作的功能來旋轉圖像做我的縮放。在該函數中,CGBitmapContextCreate的第五個參數是零,並且還爲CGImageRef對象調用autorelease。該功能工作正常。所以我懷疑這是否是錯誤。請發表評論 – Shamy
Autorelease是一個Objective-c函數,但CGImageRef是一個C對象,所以autorelease不適用於它(並且它最終都不會被autorelease池調用)。知道哪條線路導致崩潰也很有幫助。就零事件而言,蘋果可能已經停止在後端使用它,因爲他們意識到它們可以計算它,但在那裏零就很奇怪。 – borrrden