2

私は大量の CALayers を使用して、GoogleMaps と同じようにタイルベースの画像を作成しています (同じ画像のさまざまなバージョンで詳細が異なります)。

これを行うために使用しているコードは次のとおりです。

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];

私は怠け者なので、CoreGraphics を使用してファイルから CGImage をロードする気はありません。しかし、パフォーマンスが大幅に向上する場合はそうします。LoadImage は、文字列をマングルして、その画像をロードするための正しいパスを取得します。obj は、このスレッドに必要なすべての情報を保持する NSObject 構造体です。

ヘルプ?

4

5 に答える 5

3

パフォーマンスが大幅に向上することはありません。どちらかといえば、その逆です。UIImageを使用して画像をロードすることで、キャッシュのすべてのメリットを享受でき、さまざまなCALayerで使用できる非常に高速な生き物になります。

于 2008-10-14T21:31:05.473 に答える
1

これを試してみたところ、UIImage を使用するのではなく純粋な CoreGraphics を使用して画像を読み込むと、多くの画像を一度に読み込むときに速度が大幅に向上しました。

于 2008-10-19T13:15:12.663 に答える
-1

イメージの読み込みに使用しない理由の 1 つUIImage -imageNamed:は、イメージが内部キャッシュに保存され、メモリ不足の状況ではキャッシュがクリアされないことです。

于 2010-09-28T18:13:31.537 に答える
-1

「これを試してみたところ、UIImage を使用するのではなく純粋な CoreGraphics を使用して画像を読み込むと、多くの画像を一度に読み込むときに速度が著しく向上しました。」

UIImage の使用をどのように回避しましたか? より正確には、UIImage を介さずに画像ファイルを直接 CoreGraphics にロードするにはどうすればよいでしょうか?

于 2009-05-21T19:04:30.360 に答える
-3

明確な答えはありませんが、UIImage を使用すると、CGImage を使用した場合よりもロード時間が遅くなると思います。CGImage では作成時に画像の種類 (jpg または png) を指定しますが、UIImage ではオブジェクトの種類を動的に決定する必要があります。確かに、これはおそらく画像ファイルの最初の数バイトを見るのと同じくらい簡単ですが、そうではないかもしれません。

画像が実際に使用されると、UIImage を内部的に表す CGImage を使用することと、自分で作成した CGImage を使用することの間にまったく違いがあるとは思いません。私はそれらが正確に同等になると思います。

于 2008-10-16T15:53:04.953 に答える