2012-08-25 190 views
1

我正在爲一個照片應用程序工作,因爲我正在爲一個圖像添加10個效果。我爲此使用了一些庫。應用程序崩潰之後。它顯示記憶警告。我在壓縮後使用圖像,但仍然是應用程序崩潰。任何人都可以告訴我如何解決這個記憶警告。我使用這下面的代碼對圖像壓縮由於內存警告導致應用程序崩潰

-(UIImage *)resizeImage:(UIImage *)image { 
int w = image.size.width; 
int h = image.size.height; 

CGImageRef imageRef = [image CGImage]; 

int width, height; 

int destWidth = 640; 
int destHeight = 480; 
if(w > h){ 
    width = destWidth; 
    height = h*destWidth/w; 
} else { 
    height = destHeight; 
    width = w*destHeight/h; 
} 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

CGContextRef bitmap; 
bitmap = CGBitmapContextCreate(NULL, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedFirst); 

if (image.imageOrientation == UIImageOrientationLeft) { 
    CGContextRotateCTM (bitmap, M_PI/2); 
    CGContextTranslateCTM (bitmap, 0, -height); 

} else if (image.imageOrientation == UIImageOrientationRight) { 
    CGContextRotateCTM (bitmap, -M_PI/2); 
    CGContextTranslateCTM (bitmap, -width, 0); 

} else if (image.imageOrientation == UIImageOrientationUp) { 

} else if (image.imageOrientation == UIImageOrientationDown) { 
    CGContextTranslateCTM (bitmap, width,height); 
    CGContextRotateCTM (bitmap, -M_PI); 

} 

CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef); 
CGImageRef ref = CGBitmapContextCreateImage(bitmap); 
UIImage *result = [UIImage imageWithCGImage:ref]; 

CGContextRelease(bitmap); 
CGImageRelease(ref); 

return result; 
} 

和我使用的GPUImage庫,我已經加入GPUImageView用於顯示圖像。 如果有人有任何想法,請幫助我。 在此先感謝。

+0

上面的代碼只是爲了調整一個圖像。你從哪裏得到這些圖像?你一次有多少內存? GPUImage與此有什麼關係?您需要爲我們提供更多信息,甚至可以在這裏幫助您。 –

+0

另外:**儀器**(從這裏開始:http://developer.apple.com/library/ios/#technotes/tn2151/_index.html) – nielsbot

回答

1

你需要釋放colorspace

CGColorSpaceRelease(colorspace); 

這可能是泄漏的原因,但如果你調用resizeImage很多次話,就可以崩潰的原因

+0

它可能是一個泄漏,但我懷疑顏色空間物體需要多少記憶 - 事實上,我是單身物體,用於幕後的常見色彩空間。 – nielsbot

相關問題