5

iOS で画像フォーマット間の変換がなぜそんなに必要なのか、私は混乱しています。たとえば、jpg を UIImage にロードしてから顔検出を行いたい場合、CIDetector に渡す CIImage を作成する必要があります。これは、メモリとパフォーマンスの両方でヒットしていませんか?

これは、Core Graphics、Core Image、および UIKit の間のレガシーなものですか (おそらく openGL ES ですが、私はそれを使用していません)? ヒットは全体的に些細なことですか?

やるべきことはやりますが、これについてもっと理解したいです。また、変換を行う際に問題に遭遇し、フォーマット間の違いに巻き込まれることもあります。


アップデート

わかりました-これらの形式に関する混乱(またはこれらの形式の混乱...)に再び悩まされました。1時間半無駄にした。これが私がしていたことです:

ローカル イメージで顔をテストして、必要な CIImage を次のように作成しました。

CIImage *ciImage = [image CIImage];

どの向きを渡しても機能が返されませんでした。この特定の画像は以前画像で機能し、フォーマットで問題が発生したことを知っています。次のようにCCImageを作成しようとしました:CIDetectorTypeFaceCIImage

 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のテスト...

4

1 に答える 1

0

その理由はコンセプトにあります。UIKit、CoreGraphics、および CoreImage のすべては、「グランド セントラルの統一されたイメージ フォーマット」が存在できないような 3 つの根本的に異なることを行います。また、これらのフレームワークはうまく連携します。とはいえ、変換は可能な限り最適化され、できるだけ高速である必要がありますが、もちろん、画像処理は常に比較的計算コストの高い操作です。

于 2012-07-12T20:26:43.677 に答える