我如何从一个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(), ... );拜托谁能给我个提示吗?
发布于 2014-12-10 10:17:00
简单的方法是使用CGImage属性(在10.5中引入):
CGImageRef image = imageRep.CGImage;文档:
ref/occ/instm/NSBitmapImageRep/CGImage
返回值 返回基于接收器当前位图数据的自动释放的CGImageRef不透明类型。 讨论 返回的CGImageRef具有与接收器的像素尺寸相同的像素尺寸。此方法可能返回预先存在的CGImageRef不透明类型或创建新类型。如果接收器稍后被修改,则此方法的后续调用可能返回不同的CGImageRef不透明类型。
发布于 2014-12-10 10:31:35
从代码片段来看,您似乎是从一个NSData对象开始的。因此,您的问题似乎是如何从数据对象创建CGImage。在这种情况下,没有理由通过NSBitmapImageRep。
你打电话给CGImageCreate()差点就到了。您只需要弄清楚如何向它提供一个CGDataProvider。一旦您意识到CGDataProvider是与CFData连接的免费桥梁,您就可以相当直接地从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);https://stackoverflow.com/questions/27397943
复制相似问题