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