このトピックはここで何度か議論されていると確信していますが、OSX (10.8 および 10.9) での CGImage の NSBitmapImageRep への変換に関連する非常に奇妙な問題があります。
CGImage オブジェクトは、AVAssetImageGenerator copyCGImageAtTime:actualTime:error: メソッドから取得されます。私は現在、私が欲しいものを手に入れるための2つの方法を見つけました:
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];
これも機能することを願っていますが、結果の画像の青色チャネルが欠落しています。
では、グラフィックのロックを必要とせず、プロセス中に情報を失うことなく、この変換を実現するにはどうすればよいでしょうか?