4

CIFilter の結果/出力イメージである CIImage があります。次に、GLKTextureLoader を使用してその画像のテクスチャを作成します。私はそれを達成するために CGImageRef を必要とする次の関数を使用しています。

[GLKTextureLoader textureWithCGImage: options: error:];

問題は、CIImage を GLKTextureLoader で使用できる CGImageRef に変換する最良の方法は何ですか?

次の方法を試しましたが、失敗しました。

CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:fullScreenCI fromRect:fullScreenCI.extent];
self.info = [GLKTextureLoader textureWithCGImage:ref options:nil error:&error];

fullscreenCIは CIFilter の outputImage です。

上記の方法では、次のエラーが発生します。

GLK テクスチャの作成中にエラーが発生しました: エラー ドメイン=GLKTextureLoaderErrorDomain コード=12 「操作を完了できませんでした。(GLKTextureLoaderErrorDomain エラー 12.)」 UserInfo=0x1438a880 {GLKTextureLoaderErrorKey=画像のデコードに失敗しました}

色空間の問題が原因である可能性があることがわかり、次の方法を試しました。

CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:fullScreenCI fromRect:fullScreenCI.extent];
fullscreen = [UIImage imageWithData:UIImagePNGRepresentation([UIImage imageWithCGImage:ref])];
self.info = [GLKTextureLoader textureWithCGImage:fullscreen.CGImage options:nil error:&error];

上記の方法で問題なく動作するようになりました!しかし、UIImagePNGRepresentation を使用せずに CIImage を CGImageRef に変換するより良い方法があるかどうかを知りたいです。

4

0 に答える 0