我打算採取UIView
是drawed通過OpenGL ES
到UIImage
的快照,這裏是我使用的代碼:BAD_ACCESS當時的UIView到的UIImage
if(context){
[EAGLContext setCurrentContext:context];
glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
NSInteger dataLength = framebufferWidth * framebufferHeight * 4;
GLubyte* data = (GLubyte*)malloc(dataLength) ; // malloc(myDataLength);
glReadPixels(0, 0, framebufferWidth, framebufferHeight, GL_RGBA, GL_UNSIGNED_BYTE, data);
// make data provider with data.
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, data, dataLength, NULL);
// prep the ingredients
int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = 4 * framebufferWidth;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
// make the cgimage
CGImageRef result = CGImageCreate(framebufferWidth, framebufferHeight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
// then make the uiimage from that
UIImage *image = [UIImage imageWithCGImage:result];
CGImageRelease(result);
CGColorSpaceRelease(colorSpaceRef);
CGDataProviderRelease(provider);
//free(data);
return image;
}
我打算用free(data);
在return
之前,但會引起BAD_ACCESS
運行時錯誤。
所以我的問題是,如何free
正確?或者我應該free
他們在圖像發佈後?
你可以在代碼的發佈部分之前記錄'data'嗎? – esh 2013-02-14 11:09:39
您是否嘗試過使用Apple的示例代碼? http://developer.apple.com/library/ios/#qa/qa1704/_index.html – trojanfoe 2013-02-14 11:15:16
你可以在你的其他版本之前放置'free(data)',看看會發生什麼,像這樣'free(data); CGImageRelease(結果); CGColorSpaceRelease(colorSpaceRef); CGDataProviderRelease(provider);' ? – esh 2013-02-14 11:16:12