CGImage から画像を描画するアプリケーションがあります。
CImage 自体は、CGImageSourceCreateImageAtIndex を使用して読み込まれ、PNG ファイルから画像が作成されます。
これはスプライト エンジンの一部を形成します。1 つの PNG ファイルに複数のスプライト イメージがあるため、各スプライトには CGImage のどこにあるかを定義する CGRect があります。
問題は、CGContextDraw が目的の四角形のみを取り、ソースの CGImage を引き伸ばして塗りつぶすことです。
したがって、各スプライト イメージを描画するには、CGImageCreateWithImageInRect() を使用して、元のソースから複数の CGImage を作成する必要があります。
最初は、これは「安上がりな」操作だと思っていました。各 CGImage にイメージ ビットの独自のコピーを含める必要はないように思われます。
CGImage のサブセクションを CGContext に描画するためのより最適な方法があるので、CGImageCreateWithImageInRect() を頻繁に使用する必要はありませんか?
ソースの四角形がなく、CGImage 上の四角形から CGImage を簡単に作成できることを考えると、おそらく CGImage は、CGImage から作成された CGImage がサブ四角形を参照するコピーオンライト セマンティックを実装しているのではないかと疑い始めました。親と同じ物理ビットの。プロファイリングはこれが間違っていることを証明しているようです:/