2012-07-12 13 views
5

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

これは、Core Graphics、Core Image、UIKit(そしておそらくOpenGL ESですが、私はそれで動作しません)の間のいくつかの遺産ですか?ヒットは全体的にかわいいですか?

私は何をする必要があるのでしょうが、これについてもっと理解したいと思います。また、時にはコンバージョンを行ったり、フォーマットの違いに絡み合ったりすることもあります。


更新

[OK]を - 私はちょうどこれらのフォーマット(またはこれらのフォーマットの混乱...)上で、私の混乱によって再びdingedました。半時間を無駄にした。

テストをローカル画像内の顔のために、私は必要なCIImageを作成:ここで私はやっていたものです。

CIImage *ciImage = [image CIImage]; 

と関係なく、私が渡されたどのような方向の任意の機能を取り戻すなかっれていなかった私はこの特定のイメージは、CIImageフォーマットで問題が発生したの前にCIDetectorTypeFaceと動作しています。試してみました。このようなCCImage作成:

CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage]; 

と顔検出を正常に動作します。 Arrgh!私は[image CIImage]で結果のCIImageがゼロでないことを確認しました。だから私は混乱している。最初のアプローチはポインタを取得し、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のためのテスト...

答えて

0

は理由がにあります概念。 UIKit、CoreGraphics、CoreImageはすべて、3つの根本的に異なるものを提供します。これらは、「中心的な統一されたイメージフォーマット」ではありません。また、これらのフレームワークはうまく協力します。つまり、変換は可能な限り最適化され、速く行われるべきですが、もちろん画像処理は常に計算コストの高い操作です。

関連する問題