2009-08-28 4 views
3

그림판 같은 그림 프로그램을 만들고 있습니다. 브러시 획을 실행 취소/다시 실행할 수 있기를 원합니다. 어떻게 구현할 것인가?어떻게 래스터 드로잉 프로그램에서 실행 취소를 구현하겠습니까?

속도와 메모리를 최적화하십시오.

+0

은 숙제를위한 것입니까? – SingleNegationElimination

+0

아니요, 단지 아이디어를위한 군중 소싱입니다. 나는 내 대답을 내려 놓았다. 다른 아이디어? –

답변

0

캔버스의 백업 복사본을 만듭니다. 브러시 스트로크를 완전히 둘러싸는 직사각형 패치를 선택하십시오. 해당 패치에 포함 된 비트 맵을 새 버전과 백업에 모두 저장하십시오. 이제 이러한 변경 내용을 조정하여 획을 실행 취소하거나 다시 실행할 수 있습니다.

많은 메모리를 사용할 수 있습니다.

+0

긴 스트로크를 일련의 짧은 스트로크로 분해하면 필요한 메모리를 줄이는 데 많은 도움이됩니다. 'U'모양 그리기 및 U 자 모양 경로를 따르는 상자 세트와 전체 'U'모양을 포함하는 하나의 경계 상자 사용을 생각해보십시오. – MadCoder

2

변경된 캔버스 부분의 이전 상태를 기록하려면 quadtree을 사용하십시오. 실행 취소시 쿼드 트리의 캔바스 상태를 바꿉니다.

관련 문제