イメージを処理するためにCoreImageフィルタを使用しています。入力イメージにフィルタを適用すると、CIImageタイプのfilterOutputImageという出力イメージが生成されます。CIImageからUIImageを作成する
私は今、その画像を表示したい、とやってみました:
self.modifiedPhoto = [UIImage imageWithCIImage:filterOutputImage];
self.photoImageView.image = self.modifiedPhoto;
ビューがしかし、ブランクである - 何も表示されていません。
filterOutputImageとself.modifiedPhotoの両方の詳細を出力するロギングステートメントを追加すると、これらのロギングステートメントで、両方のvarsに正当なイメージデータが含まれているように見えます。サイズが報告されていてオブジェクトがnilではありません。
グーグルをしてから、私は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);
この第2のアプローチでは、ビューに正しい画像が表示されています。
誰かが私の最初の試みが失敗した理由を説明してもらえますか? imageWithCIImageメソッドで何が間違っていて、存在していると思われるが表示できない画像になっているのですか? CIImageからUIImageを生成するには、常にCGImageステージを「通過」する必要がありますか?
願って誰かが私はself.photoImageView
がUIImageViewであると仮定し、私の混乱:)
H.
Ahh!ありがとうございました。はい、photoImageViewはUIImageViewです。私はそれがUIImageのCGImageプロパティを使用していることを知らなかった。 – Hamster
もう1つの質問です。どの文書でUIImageViewがその画像をどのように表示するのか説明していますか?私はあなたがそれをどこから学んだのかを調べようとしています:) – Hamster
実際、私はバイナリコードを実際に見ています:UIImageViewはsetContents:を呼び出すのではなく、独自のCALayerで-drawRectをオーバーライドします。最終的にCGImageRefをつかんで描画するUIImage描画メソッドを呼び出すようです。だから、同じ結果が、私の詳細は間違っていた。 – iccir