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]];