일부 CGContext 함수로 "전류 변환 매트릭스"를 ID로 재설정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/469505

문제

나는 CTM에서 일련의 번역과 회전을하고 있으며 어느 시점에서 나는 변환으로 더 나아가기 전에 신원으로 재설정해야합니다.

올바른 방법을 찾을 수 없습니다 (분명히 CGCONTEXTSETCTM이라는 기능이 있어야 함) 효율성이 핵심이므로 CGCONTEXTSAVEGSTATE/CGCONTEXTRESTOREGSTATE를 사용하고 싶지 않습니다 ...

도움이 되었습니까?

해결책

전류 변환 매트릭스를 통해 얻으십시오 cgcontextgetctm, 그것을 뒤집습니다 cgaffinetransforminvert 그리고 전류 매트릭스에 반전 된 매트릭스를 곱하십시오 (중요합니다!) CGCONTEXTCONCATCTM. CTM은 이제 정체성입니다.

다른 팁

현재 CTM을 CGAFFINETRANSFORMINVERT로 반전시키는 것은 현재 CTM이 단수형 인 경우 작동하지 않습니다.

명백한 경우는 이전에 cgcontextconcatctm이 행렬 cgaffinetransformmake (0, 0, 0, 0, 0, 0)로 수행 된 경우입니다.

저장/복원 작업은 아마도 ID 매트릭스의 크기와 비슷한 메모리 영역의 단일 메모리 사본 일 것입니다 (크기의 두 번 또는 세 번). 저장 작업에만 발생할 수 있습니다. 이것은 아마도 NOP 함수 호출보다 훨씬 느리지 않을 것입니다. 각 그래픽 작업은 여러 번의 곱셈 작업의 규모에 있으며 각 저장/복원 사이클에 대해 코드에서 두 번 이상 발생한다고 생각합니다. 하나의 그래픽 작동 시간은 단일 저장/복원 사이클보다 클 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top