如何从 NSBitmapImageRep 创建 CGImageRef



如何从NSBitmapImageRep创建CGImageRef?或者我怎样才能像NSBitmapImageRep一样定义一个完整的新CGImageRefNSBitmapImageRep的定义工作正常。但我需要一个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
                             ];

我不知道如何从NSBitmapImageRep创建CGImageRef或如何定义新CGImageRef

CGImageRef imageRef = CGImageCreate(width, height, depth, channel*depth, channel*width, CGColorSpaceCreateDeviceRGB(), ... );

拜托,有人可以给我一个提示吗?

简单的方法是使用 CGImage 属性(在 10.5 中引入):

CGImageRef image = imageRep.CGImage;

文档:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSBitmapImageRep_Class/index.html#//apple_ref/occ/instm/NSBitmapImageRep/CGImage

返回值

返回基于 接收器的当前位图数据。

讨论

返回的 CGImageRef 的像素尺寸为 与接收器相同。此方法可能会返回预先存在的 CGImageRef 不透明类型或创建一个新类型。如果接收器在后面 修改后,此方法的后续调用可能会返回不同的 CGImageRef 不透明类型。

从你的代码片段来看,你似乎从一个NSData对象开始。因此,您的问题似乎是如何从数据对象创建CGImage。在这种情况下,没有理由通过NSBitmapImageRep.

你几乎在那里打电话给CGImageCreate().你只需要弄清楚如何为它提供CGDataProvider。您可以非常直接地从NSData创建CGDataProvider,一旦您意识到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);

相关内容

  • 没有找到相关文章

最新更新