如何从CGImageRef
创建NSBitmapImageRep
?
或者,如何以与CGImageRef
相同的方式定义完整的新NSBitmapImageRep
? NSBitmapImageRep
的定义很好。但我需要一张CGImageRef
的图像。
unsigned char *plane = (unsigned char *)[data bytes]; // data = 3 bytes for each RGB pixel
NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: &plane
pixelsWide: width
pixelsHigh: height
bitsPerSample: depth
samplesPerPixel: channel
hasAlpha: NO
isPlanar: NO
colorSpaceName: NSCalibratedRGBColorSpace
//bitmapFormat: NSAlphaFirstBitmapFormat
bytesPerRow: channel * width
bitsPerPixel: channel * depth
];
我不知道如何从CGImageRef
创建NSBitmapImageRep
或如何定义新的CGImageRef
:
CGImageRef imageRef = CGImageCreate(width, height, depth, channel*depth, channel*width, CGColorSpaceCreateDeviceRGB(), ... );
拜托,有人可以给我一个暗示吗?
答案 0 :(得分:3)
简单的方法是使用CGImage
属性(在10.5中引入):
CGImageRef image = imageRep.CGImage;
文档:
返回值
返回基于的自动释放的CGImageRef opaque类型 接收者的当前位图数据。
<强>讨论强>
返回的CGImageRef具有的像素尺寸 与接收器相同。此方法可能会返回预先存在的 CGImageRef opaque类型或创建一个新类型。如果接收器是晚些时候 修改后,此方法的后续调用可能会返回不同的内容 CGImageRef不透明类型。
答案 1 :(得分:0)
从您的代码段开始,您似乎开始使用NSData
对象。所以,您的问题似乎是如何从数据对象创建CGImage
。在这种情况下,没有理由通过NSBitmapImageRep
。
你几乎在那里打电话给CGImageCreate()
。您只需要弄清楚如何为其提供CGDataProvider
。一旦您意识到CGDataProvider
与NSData
的免费桥接,您就可以直接从NSData
创建CFData
。所以:
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGImageRef image = CGImageCreate(width, height, depth / 3, depth, channel*width, colorspace, kCGImageAlphaNone, provider, NULL, TRUE, kCGRenderingIntentDefault);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);