Sto utilizzando alcuni filtri CoreImage per elaborare un'immagine. Applicando il filtro alla mia immagine di input si ottiene un'immagine di output chiamata filterOutputImage di tipo CIImage.Creazione di UIImage da CIImage
ora desidero visualizzare l'immagine, e provato a fare:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
Tuttavia la vista è vuota - viene visualizzato nulla.
Se aggiungo la registrazione dichiarazioni che stampano i dettagli relativi sia filterOutputImage e self.modifiedPhoto, tali dichiarazioni sono logging me dimostrando che entrambe queste Vars sembrano contenere dati dell'immagine legittima: sono stati segnalati la loro dimensione e gli oggetti non sono nulle.
Quindi, dopo aver effettuato alcune ricerche su Google, ho trovato una soluzione che richiede di passare attraverso una fase 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);
Questo secondo approccio funziona: io sono sempre l'immagine corretta visualizzato nella vista.
Qualcuno può spiegarmi perché il mio primo tentativo è fallito? Cosa sto facendo male con il metodo imageWithCIImage che risulta in un'immagine che sembra esistere ma non può essere visualizzata? È sempre necessario "passare attraverso" una fase CGImage per generare un UIImage da una CIImage?
sperando che qualcuno possa chiarire la mia confusione :)
H.
Ahh! Grazie. Sì, PhotoImageView è UIImageView. Non avevo idea che usasse la proprietà CGImage di UIImage. – Hamster
Un'altra domanda, in quale documento viene spiegato come UIImageView mostra la sua immagine? Sto cercando di scoprire da dove l'hai imparato da :) – Hamster
In realtà, ora che effettivamente guardo il codice binario: UIImageView sovrascrive -drawRect: piuttosto che chiamare setContents: sul proprio CALayer. Sembra che alla fine richiami i metodi di disegno UIImage, che catturano il CGImageRef e lo disegnano. Quindi, stesso risultato, ma i miei dettagli erano sbagliati. – iccir