Создание UIImage из CIImage

Я использую некоторые фильтры CoreImage для обработки изображения. Применение фильтра к моему входному изображению приводит к выходному изображению с именем filterOutputImage типа CIImage.

Теперь я хочу отобразить это изображение и попытался сделать:

self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;

Однако вид пуст - ничего не отображается.

Если я добавлю операторы регистрации, которые распечатывают подробности как о filterOutputImage, так и о self.modifiedPhoto, эти операторы регистрации покажут мне, что обе эти переменные, похоже, содержат допустимые данные изображения: их размер сообщается, а объекты не равны нулю.

Итак, поработав немного в Google, я нашел решение, которое требует прохождения стадии CGImage; vis:

CGImageRef outputImageRef = [context createCGImage:filterOutputImage fromRect:[filterOutputImage extent]];
self.modifiedPhoto = [UIImage imageWithCGImage:outputImageRef scale:self.originalPhoto.scale orientation:self.originalPhoto.imageOrientation];
self.photoImageView.image = self.modifiedPhoto;
CGImageRelease(outputImageRef);

Второй подход работает: я получаю правильное изображение, отображаемое в представлении.

Кто-нибудь, пожалуйста, объясните мне, почему моя первая попытка не удалась? Что я делаю не так с методом imageWithCIImage, в результате которого изображение, кажется, существует, но не может быть отображено? Всегда ли необходимо «проходить» стадию CGImage, чтобы сгенерировать UIImage из CIImage?

Надеюсь, кто-то сможет прояснить мою путаницу :)

H.

10
задан Hamster 1 February 2012 в 10:11
поделиться