我有一个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。