2011-01-13 12 views
0

私は多くの画像で作業する必要があります。大きすぎるため、メモリ内のすべてをUIImageとして保持することはできません。
また、画像の色を変更して、その場でマージする必要があります。
メモリ上に多くのイメージを持たないときに、元のNSDataからUIImageを作成し、色を変更し、それらを結合するのはかなり遅いです。 (限り私が得ることができる)(iphone)はUIImageより少ないメモリを消費しますか?

私は多分基礎となるCGLayerRef(結合される画像用)とCGContextRef(結果の結合された画像)を保存できると思った。

CGLayerRefまたはCGContextRefがUIImage自体よりもメモリが小さいかどうかはわかりません。
私は最近、w * h画像がメモリ内のw * h * 4バイトを占めると聞きました。
CGLayerRefまたはCGContextRefもそのメモリを消費しますか?

ありがとう

  • 編集

以下は、私が小さいメモリ使用量にすることを考えて、時間を計算してい戦略です。

CGLayerRef layer = CGLayerCreateWithContext(self.bitmapContext, self.frame.size, NULL); 
CGContextRef layerContext = CGLayerGetContext(layer); 
CGContextDrawImage(layerContext, self.bounds, image.CGImage); 
store 'layer' somewhere. 
possibly destroy layerContext 

答えて

0

画像のメモリ使用量は、ほぼすべてビットマップに取り込まれます。 UIImageまたはCGImageRefなどを使用しても、それは変更されません。ビットマップはまだメモリに残っています。

+0

ああ、層の上に何かを描画するlayerContext(ビットマップ)が必要なので、レイヤーを維持するとメモリが消えてしまいます。私は正しいですか? – eugene

+0

私があなたを正しく理解しているとすれば、それは正しいです。ビットマップがメモリ内にある限り、おおよそ同じメモリ使用量が表示されます。 –

+0

もう1つ質問がありますが、レイヤのコンテキストを作成していない人は、CGLayerCreateWithContextでレイヤーを作成するだけです。これは、レイヤーのコンテキストが自動的に作成され、作成された各レイヤーについて何も描画されていない場合でも、同じメモリーを占有することを意味しますか? – eugene

関連する問題