将CIImage转换为CGImageRef,可用于创建GLK纹理

时间:2013-07-26 05:51:25

标签: ios cgimageref ciimage glktextureloader

我有一个CIImage,它是CIFilter的结果/输出图像。现在我想使用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纹理时出现

错误:错误Domain = GLKTextureLoaderErrorDomain Code = 12“无法完成操作。(GLKTextureLoaderErrorDomain错误12。)”UserInfo = 0x1438a880 {GLKTextureLoaderErrorKey =图像解码失败} < / p>

我发现可能是因为某些颜色空间问题并尝试了以下方法:

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];

现在上面的方法运行正常!但我想知道是否有更好的方法将CIImage转换为CGImageRef而不必使用UIImagePNGRepresentation。

0 个答案:

没有答案