我很确定这个话题已经在这里讨论过好几次了,但是我有一个非常奇怪的问题,与在 OSX(10.8 和 10.9)上将 CGImage 转换为 NSBitmapImageRep 相关。
CGImage 对象来自 AVAssetImageGenerator copyCGImageAtTime:actualTime:error: 方法。我目前找到了两种方法来获得我想要的东西:
NSSize size = NSMakeSize(CGImageGetWidth(cGImage), CGImageGetHeight(cGImage));
NSImage *nsImage = [[NSImage alloc] initWithCGImage:cGImage size:size];
[nsImage lockFocus];
NSBitmapImageRep *bitmap = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0.0, 0.0, [nsImage size].width, [nsImage size].height)] autorelease];
[nsImage unlockFocus];
[nsImage release];
这可以正常工作,但速度有点慢。当我只想处理数据时,我看不到锁定图形上下文的意义......
我还尝试了以下方法:
bitmap = [[[NSBitmapImageRep alloc] initWithCGImage:cGImage] autorelease];
希望这也有效,但结果图像的蓝色通道丢失。
那么,如何在不需要图形锁定且在此过程中不丢失信息的情况下实现这种转换呢?