2012-06-13 37 views
0

我寫了一個小功能來放大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

嗯,對於一件事,你通過傳遞0作爲「CGBitmapContextCreate」的第五個參數並且爲另一個你不能自動釋放CG對象而說「我的上下文每行有零個字節」。不要嘗試。 – borrrden

+0

@borrrden嗨,我正在修改一個已經工作的功能來旋轉圖像做我的縮放。在該函數中,CGBitmapContextCreate的第五個參數是零,並且還爲CGImageRef對象調用autorelease。該功能工作正常。所以我懷疑這是否是錯誤。請發表評論 – Shamy

+0

Autorelease是一個Objective-c函數,但CGImageRef是一個C對象,所以autorelease不適用於它(並且它最終都不會被autorelease池調用)。知道哪條線路導致崩潰也很有幫助。就零事件而言,蘋果可能已經停止在後端使用它,因爲他們意識到它們可以計算它,但在那裏零就很奇怪。 – borrrden

回答

1

CGImageRef不能自動釋放,它的核心基礎類型。嘗試使用CGImageRelease(scaledImage)代替。

+1

應該是'CGImageRelease',但是除了命名之外,可能再沒什麼區別了。 – borrrden

+0

你是對的,謝謝 –

相關問題