10

私は CTM で一連の変換と回転を行っていますが、ある時点で、さらに変換を行う前に ID にリセットする必要があります。

私はそれを行う適切な方法を見つけることができません (明らかに、CGContextSetCTM などの名前の関数があったはずです)。効率が重要であるため、CGContextSaveGState/CGContextRestoreGState を使用したくありません...

4

3 に答える 3

16

CGContextGetCTMを介して現在の変換マトリックスを取得し、 CGAffineTransformInvertで反転し、現在のマトリックスにCGContextConcatCTMを使用して反転されたマトリックスを乗算します (これは重要です!) 。CTM はアイデンティティになりました。

于 2009-02-07T00:57:40.677 に答える
3

現在の CTM が特異な場合、CGAffineTransformInvert を使用して現在の CTM を反転しても機能しないことに注意してください。

明らかなケースは、以前に CGContextConcatCTM が行列 CGAffineTransformMake(0, 0, 0, 0, 0, 0) で実行された場合です。

于 2011-06-01T07:57:08.827 に答える
3

保存/復元操作は、おそらく単位行列のサイズ (サイズの 2 倍または 3 倍) に匹敵するメモリ領域の単一のメモリ コピーです。保存操作でのみ発生する可能性があります。これは、おそらく nop FUNCTION 呼び出しよりも遅くないと考えてください。各グラフィック操作は、いくつかの乗算操作の規模であり、保存/復元サイクルごとにコードでこれが複数回発生すると推測しています。1 回のグラフィック操作の時間は、おそらく 1 回の保存/復元サイクルよりも長くなります。

于 2011-04-25T14:57:29.027 に答える