Я использую некоторые фильтры CoreImage для обработки изображения. Применение фильтра к моему входному изображению приводит к выходному изображению с именем filterOutputImage типа CIImage.
Теперь я хочу показать это изображение и попытался сделать:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
Представление, однако, пустое - ничего не отображается.
Если я добавлю операторы журналирования, которые выводят подробности как о filterOutputImage, так и self.modifiedPhoto, эти операторы журналирования показывают мне, что обе эти переменные содержат правильные данные изображения: их размер сообщается, а объекты не равны нулю.
Итак, после некоторого поиска в Google, я нашел решение, которое требует прохождения стадии CGImage; визави:
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?
Надеясь, что кто-то может прояснить мое замешательство :) 1011 *
H.