Преобразование 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.

0 ответов

Другие вопросы по тегам