2012-10-24 2 views
1

이 비슷한 질문에 대한 추가 사항입니다 : Which is faster when animating the UI: a Control or a Picture?.더 빠르고, 재귀 적으로 비트 맵을 한 번 또는 재귀 적으로 화면으로 그리는 것은 어느 것입니까?

나는 모양의 트리를 반복적으로 반복하여 각 보이는 모양을 화면에 그립니다. 약 2 ~ 3 세대에 걸쳐 사용자가 실시간으로 확대하거나 이동할 때 사물이 부드럽게 처리되지만 약 4-6 세대가되면 사물이 느려집니다.

성능 향상을 위해 모든 트리 업데이트마다 비트 맵을 그려서 무효화 할 때마다 비트 맵을 그려야하며 그렇지 않을 경우 모든 자체 무효화가 재귀를 통해 진행하는 것이 좋습니다.

지금 해결을 위해 노력하고 있습니다. 그러나 끝내기 전에 귀하의 답변은 여전히 ​​감사하겠습니다!

답변

1

메모리의 비트 맵에 그리는 것이 화면을 그리는 것보다 빠릅니다. 매번 업데이트 할 때마다 전체 화면을 다시 그리는 경우 비트 맵을 작성한 다음 해당 비트 맵을 화면에 표시하는 것이 더 좋습니다. 화면의 일부분 만 업데이트하는 경우에는 비트 맵을 작성하고 전체 내용을 화면에 그리는 것보다 화면에 여러 개의 블리트가 더 빨리 수행되어야하는지 여부를 판단해야합니다.

일반적으로 비트 맵을 메모리에 작성한 다음 구성된 비트 맵을 화면에 쓰는 것이 좋습니다. 대개 더 빠르며 중복되는 영역이 빠르게 연속적으로 업데이트되는 경우 표시되는 깜박임을 줄입니다.

추가 정보 :

비트 맵이 얼마나 큰에 따라 모든 무효화 호출에 전체 일을 그리려하지 않을 수 있습니다. 한 가지 해결책은 위에서 설명한대로 메모리의 비트 맵을 업데이트하는 것이지만 업데이트 된 영역 (경계 상자)을 추적하는 것입니다. 그런 다음 경계 상자를 결합하고 화면에 전체 비트 맵을 그리는 것보다 더 빠를 수있는 몇 가지 작은 그리기 작업을 수행 할 수 있습니다. 이것은 훨씬 더 효율적 일 수 있지만, 코드는 꽤 복잡해집니다. 일반적으로, "영역 수가 N보다 크거나 여러 영역이 전체 영역의 X % 이상을 차지하는 경우 전체 비트 맵을 그립니다"라는 코드를 보았습니다. N 및 X 번호는 프로그램 시작시 결정됩니다.

+0

비트 맵을 업데이트 할 때만 가져 오지만 모든 무효화 권한이 사용됩니다. 추가 참고 사항 : 너비와 높이가 (마지막 세대) * 배율 인 비트 맵은 상대적으로 클 수 있습니다. '(Radius * Scale * 2)' – TekuConcept

+0

@ChristopherWalker : 예, 업데이트시 비트 맵을 구성하고 무효화 할 때 화면에 그립니다. 내 추가 정보를 참조하십시오. –

+0

방금 ​​구현이 완료되었으므로 답이 맞습니다. 비트 맵으로 그리는 것이 화면에 그리는 것보다 빠릅니다. 설명과 마찬가지로 사용자 줌/팬 기능을 대신하여 모든 무효화를 그려야하지만'DrawImageUnscaled' 대신'DrawImage'를 사용 하시겠습니까? – TekuConcept

관련 문제