iOS 取得CGimage字节数据的方法

通过我在网上搜索和总结,目前看来,我发现两种比较方便的方式。

1. CGImage -> CGDataProvider -> CFData -> xx *

CGDataProviderRef provider =CGImageGetDataProvider(CGImage);
void*data =(void*)CFDataGetBytePtr(CGDataProviderCopyData(provider));

这样得到的就是void*类型的数据.

2. CGImage -> CGContext -> void *

int sWidth=CGImageGetWidth(CGImage);
int sHeight=CGImageGetHeight(CGImage);
CGImageRef mContent =CGImage;
CGContextRef context =CGBitmapContextCreate(NULL,CGImageGetWidth(mContent),CGImageGetHeight(mContent),
CGImageGetBitsPerComponent(mContent),CGImageGetBytesPerRow(mContent),
CGImageGetColorSpace(mContent),CGImageGetBitmapInfo(mContent));
CGContextDrawImage(context,CGRectMake(0,0, sWidth, sHeight), mContent);
void*data=CGBitmapContextGetData(context);

当得到CGimage的字节数据,有时又需要把它转化成UIImage.

void*data;
CGDataProviderRef pv=CGDataProviderCreateWithData(data, data, sWidth*sHeight*4,ContentReleaseCallBack);
CGImageRef content=CGImageCreate(sWidth , sHeight,8,32,4*sWidth,
CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrder32Big | kCGImageAlphaNoneSkipLast,
pv, NULL,true, kCGRenderingIntentDefault);
UIImage*ci =[UIImage imageWithCGImage:content];

以上一套方法,能正常显示图像,只是在alpha的值上和原图有些不一样转成字节数据再转换成UIImage以后,原本是透明的部分变成了黑色

UIImage *ci = [UIImage imageWithData:[NSData dataWithBytes:data length:sWidth*sHeight*4]];

 

posted @ 2013-07-22 14:51  痴人指路  阅读(2684)  评论(0编辑  收藏  举报