首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从CGImageRef创建NSBitmapImageRep?

如何从CGImageRef创建NSBitmapImageRep?
EN

Stack Overflow用户
提问于 2014-12-10 09:55:23
回答 2查看 1.2K关注 0票数 2

我如何从一个CGImageRef创建一个NSBitmapImageRep?或者,如何以与CGImageRef相同的方式定义一个完整的新NSBitmapImageRepNSBitmapImageRep的定义工作得很好。但我需要一张像CGImageRef的图片。

代码语言:javascript
复制
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

代码语言:javascript
复制
CGImageRef imageRef = CGImageCreate(width, height, depth, channel*depth, channel*width, CGColorSpaceCreateDeviceRGB(), ... );

拜托谁能给我个提示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-10 10:17:00

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

代码语言:javascript
复制
CGImageRef image = imageRep.CGImage;

文档:

ref/occ/instm/NSBitmapImageRep/CGImage

返回值 返回基于接收器当前位图数据的自动释放的CGImageRef不透明类型。 讨论 返回的CGImageRef具有与接收器的像素尺寸相同的像素尺寸。此方法可能返回预先存在的CGImageRef不透明类型或创建新类型。如果接收器稍后被修改,则此方法的后续调用可能返回不同的CGImageRef不透明类型。

票数 3
EN

Stack Overflow用户

发布于 2014-12-10 10:31:35

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

你打电话给CGImageCreate()差点就到了。您只需要弄清楚如何向它提供一个CGDataProvider。一旦您意识到CGDataProvider是与CFData连接的免费桥梁,您就可以相当直接地从NSData创建一个CFData。所以:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27397943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档