data buffer与CGImage/UIImage互转
2016-01-26 10:27
429 查看
(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;
}
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;
}
相关文章推荐
- UITableView获取cell的row值(解决自定义cell里的button通过点击无法获得cell的indexpath的问题)
- hdu 1242 Rescue(优先队列)
- iOS开发笔记--设置UITextField键盘上return key不可点击
- 一篇文章掌握RequireJS常用知识
- iOS开发笔记--UILabel的相关属性设置
- iOS开发笔记--UILabel和UITextView自适应文本高度代码
- iOS开发笔记--UIImageView的属性之animationImages详解
- 2016太原UI设计师郭文军图标的制作原则,面试必考
- iOS开发笔记--UILabel显示不同的字体和颜色
- iOS开发笔记--UIView中的坐标转换
- lightoj 1012 - Guilty Prince
- iOS应用UI开发中的字体和按钮控件使用指南
- IOS开发-UIView之动画效果的实现方法
- iOS UISearchController
- 《iOS Human Interface Guidelines》——Quick Look
- UIColor,CGColor,CIColor三者的区别和联系
- C#中SqlCommandBuilder批量数据增加修改
- 在 Windows 10 上安装 Arduino 开发环境
- Codeforces Round #328 (Div. 2) 592 B. The Monster and the Squirrel
- Priority Queue Implementation