Bir görüntüyü işlemek için bazı CoreImage filtreleri kullanıyorum. Filtreyi giriş resmime uygulamak, CIImage türünde filterOutputImage adlı bir çıktı görüntüsüyle sonuçlanır.CIImage öğesinden UIImage oluşturma
Şimdi bu görüntüyü göstermek isteyen ve yapıyor çalıştı:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
görünüm ancak boştur - hiçbir şey görüntülenmekte olduğunu.
Hem filterOutputImage hem de self.modifiedPhoto ile ilgili ayrıntıları yazdıran günlük ifadeleri eklerseniz, bu günlük bildirimleri, her iki değişkenin de yasal görüntü verileri içerdiği görülüyor: boyutları bildiriliyor ve nesneler sıfır değil.
Bazı Googling yaptıktan sonra, bir CGImage aşamasından geçmeyi gerektiren bir çözüm buldum; 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);
Bu ikinci yaklaşım çalışır: Ben görünümünde görüntülenen doğru görüntüyü alıyorum.
Birisi bana ilk denememin neden başarısız olduğunu açıklayabilir mi? Ne var ama görünen olamaz bir görüntü ile sonuçlanan imageWithCIImage yöntemi ile yanlış yapıyorum? Bir CIImage'dan bir UIImage oluşturmak için bir CGImage aşamasının "geçmesi" her zaman gerekli midir?
umuduyla Birisi self.photoImageView
bir UIImageView olduğunu varsayalım çelişkimi :)
H.
Ahh! Teşekkür ederim. Evet, photoImageView bir UIImageView. UIImage'ın CGImage özelliğini kullandığı hakkında hiçbir fikrim yoktu. – Hamster
Bir soru daha, UIImageView görüntüsünü nasıl görüntülediğini açıklıyor? Bunu nereden öğrendiğimi bulmaya çalışıyorum :) – Hamster
Aslında, aslında ikili koda bakıyorum: UIImageView overdre'leri -drawRect: setContents'ı çağırmak yerine: kendi CALayer'ında. Nihayetinde CGImageRef'i yakalayıp çizen UIImage çizim yöntemlerini çağırıyor gibi görünüyor. Yani, aynı sonuç, ama detaylar yanlıştı. – iccir