Преобразование CIImage в CGImageRef, который можно использовать для создания текстуры GLK
У меня есть CIImage, который является результатом / выходным изображением CIFilter. Теперь я хочу создать текстуру этого изображения с помощью GLKTextureLoader. Я использую следующую функцию, которая требует CGImageRef для достижения этой цели.
[GLKTextureLoader textureWithCGImage: options: error:];
Итак, вопрос в том, каков наилучший способ конвертировать CIImage в CGImageRef, который может использоваться GLKTextureLoader?
Я попробовал следующий метод, но это не удалось:
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:fullScreenCI fromRect:fullScreenCI.extent];
self.info = [GLKTextureLoader textureWithCGImage:ref options:nil error:&error];
fullscreenCI является выходным изображением фильтра CIF.
Вышеуказанный метод дает следующую ошибку:
ошибка при создании текстуры GLK: Ошибка Domain=GLKTextureLoaderErrorDomain Code=12 "Операция не может быть завершена. (GLKTextureLoaderErrorDomain error 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];
Теперь вышеуказанный метод работает отлично! Но я хочу знать, есть ли лучший способ конвертировать CIImage в CGImageRef без необходимости использовать UIImagePNGRepresentation.