2

我怎样才能CGImageRef从一个创建一个NSBitmapImageRepCGImageRef或者我如何以与 ?相同的方式定义一个全新的NSBitmapImageRep?a 的定义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
                             ];

我不知道如何创建CGImageReffrom theNSBitmapImageRep或如何定义一个 new CGImageRef

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

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

4

2 回答 2

3

简单的方法是使用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 不透明类型或创建一个新类型。如果稍后修改接收器,则此方法的后续调用可能会返回不同的 CGImageRef 不透明类型。

于 2014-12-10T10:17:00.543 回答
0

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

您几乎与呼叫到那里CGImageCreate()。您只需要弄清楚如何向CGDataProvider它提供 a 。一旦您意识到它CGDataProvider与. 所以:NSDataNSDataCFData

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);
于 2014-12-10T10:31:35.610 回答