Я использую некоторые фильтры 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.