【发布时间】:2014-08-21 12:11:43
【问题描述】:
我正在使用 Vuforia ,试图从相机实例中获取像素并转换为 UIImage
- (UIImage *)createUIImage:(const QCAR::Image *)qcarImage
{
int width = qcarImage->getWidth();
int height = qcarImage->getHeight();
int bitsPerComponent = 8;
int bitsPerPixel = QCAR::getBitsPerPixel(QCAR::RGB888);
int bytesPerRow = qcarImage->getBufferWidth() * bitsPerPixel / bitsPerComponent;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, qcarImage->getPixels(), QCAR::getBufferSize(width, height, QCAR::RGB888), NULL);
CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
CGImageRef imageRefRetain = CGImageRetain(imageRef);
UIImage *image = [UIImage imageWithCGImage:imageRefRetain];
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpaceRef);
CGImageRelease(imageRef);
return image;
}
获取图像后,我将其添加到可变数组中。
从可变数组中检索图像后,每个方法都会崩溃 即
UIImageView setImage:
甚至打电话
NSData* comppressedData = UIImageJPEGRepresentation(image,1);
让我的应用不崩溃的唯一方法是添加以下内容
- (UIImage *)createUIImage:(const QCAR::Image *)qcarImage
{
...
UIImage *image = [UIImage imageWithCGImage:imageRefRetain];
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpaceRef);
CGImageRelease(imageRef);
NSData* comppressedData = UIImageJPEGRepresentation(image,1);
UIImage* jpegImage = [UIImage imageWithData:comppressedData];
return jpegImage;
}
所以我认为这是一个与 CGImageRef 发布有关的问题。 我真的需要了解发生了什么以及为什么图像参考在存在方法后无效。
【问题讨论】:
标签: ios objective-c core-graphics vuforia