Я использую некоторые фильтры CoreImage для обработки изображения. Применение фильтра к моему входному изображению приводит к выходному изображению, называемому filterOutputImage типа CIImage.Создание UIImage из CIImage
Теперь я хочу, чтобы отобразить этот образ, и пытался делать:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
мнение, однако, является пустым - не отображается ничего.
Если я добавляю инструкции регистрации, которые распечатывают данные об фильтрах и фильтрах selfmodifiedPhoto, те заявления о регистрации указывают на то, что оба эти вара, как представляется, содержат законные данные изображения: их размер сообщается, а объекты не ноль.
Итак, после выполнения некоторых действий в 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.
Ahh! Спасибо. Да, photoImageView - это UIImageView. Я понятия не имел, что он использует свойство CGImage UIImage. – Hamster
Еще один вопрос, в каком документе объясняется, как UIImageView отображает его изображение? Я пытаюсь выяснить, откуда вы это узнали :) – Hamster
Собственно, теперь, когда я действительно смотрю на двоичный код: UIImageView переопределяет -drawRect: вместо вызова setContents: на свой собственный CALayer. Похоже, что в конечном итоге он вызывает методы рисования UIImage, которые захватывают CGImageRef и рисуют его. Итак, тот же результат, но мои данные были неправильными. – iccir