(1)data buffer转CGImage和UIImage,可以先转CGImage再转UIImage。直接粘贴代码:
void dataProviderReleaseCallback (void *info, const void *data, size_t size)
{
free((void *)data);
}
- (UIImage*)convertBufferToUIImage:(void*)rawImagePixels width:(int)width height:(int)height
{
int totalBytesForImage = width * height * 4;
//rawImagePixels = (GLubyte *)malloc(totalBytesForImage);
CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, rawImagePixels, totalBytesForImage, dataProviderReleaseCallback);
CGColorSpaceRef defaultRGBColorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef cgImageFromBytes = CGImageCreate(width, height, 8, 32, 4 * width, defaultRGBColorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaLast, dataProvider, NULL, NO, kCGRenderingIntentDefault);
CGDataProviderRelease(dataProvider);
CGColorSpaceRelease(defaultRGBColorSpace);
UIImage *image = [UIImage imageWithCGImage:cgImageFromBytes];
return image;
}
(2)UIImage转data buffer:
- (GLubyte *)convertUIImageToBuffer:(UIImage*)image width:(int)width height:(int)height
{
GLubyte *imageData = NULL;
CFDataRef dataFromImageDataProvider = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
imageData = (GLubyte *)CFDataGetBytePtr(dataFromImageDataProvider);
//CFRelease(dataFromImageDataProvider);//最后别忘了release
return imageData;
}