iOS で画像フォーマット間の変換がなぜそんなに必要なのか、私は混乱しています。たとえば、jpg を UIImage にロードしてから顔検出を行いたい場合、CIDetector に渡す CIImage を作成する必要があります。これは、メモリとパフォーマンスの両方でヒットしていませんか?
これは、Core Graphics、Core Image、および UIKit の間のレガシーなものですか (おそらく openGL ES ですが、私はそれを使用していません)? ヒットは全体的に些細なことですか?
やるべきことはやりますが、これについてもっと理解したいです。また、変換を行う際に問題に遭遇し、フォーマット間の違いに巻き込まれることもあります。
アップデート
わかりました-これらの形式に関する混乱(またはこれらの形式の混乱...)に再び悩まされました。1時間半無駄にした。これが私がしていたことです:
ローカル イメージで顔をテストして、必要な CIImage を次のように作成しました。
CIImage *ciImage = [image CIImage];
どの向きを渡しても機能が返されませんでした。この特定の画像は以前の画像で機能し、フォーマットで問題が発生したことを知っています。次のようにCCImageを作成しようとしました:CIDetectorTypeFace
CIImage
CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
顔検出は正常に機能します。ああ![image CIImage]
結果のCIImageがnilでないことを確認しました。だから私は混乱しています。最初のアプローチはポインタを取得するだけで、2 番目のアプローチは新しい CIImage を作成します。違いはありますか?
UIImage.h ファイルを掘り下げると、次のように表示されます。
// returns underlying CGImageRef or nil if CIImage based
@property(nonatomic,readonly) CGImageRef CGImage;
// returns underlying CIImage or nil if CGImageRef based
@property(nonatomic,readonly) CIImage *CIImage;
だから私はそれが鍵だと思います-開発者は注意してください:nilのテスト...