창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


질문게시판
- 반드시 검색을 하신 후 원하는 답변을 찾을 수 없을 때, 질문을 올려주세요.


LIST ALL
Posted by 지상현2011-06-13 08:41:41, Hit : 5057
[re] 그림판 깜빡임 문제 질문드립니다
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=qna&no=2467
>창조로 그림판(그림 그리는 프로그램)을 만들면 마우스를 움직일 때 깜빡거리네요...
혹시 해결할 방법 없을까요?

그림판을 어떻게 구현하셨는지 모르겠지만, 십중팔구 마우스를 끌어서 선을 그릴 때 이전에 있던 선을 지우고, 새로운 선을 그리는 방식으로 만드셨을 겁니다.
그러나 이렇게 '지우고' 새로 그리는 방법은, 지우는 순간이 화면에 보여버리는 수가 있기 때문에 깜빡이는 것처럼 보이는 것입니다.

모니터 같은 표시 장치는 화면에 표시되는 타이밍이 있기 때문에, 그리는 속도와는 상관 없이 발생합니다. 프로그램이 초당 천 번 그릴 수 있는 능력이 있더라도, 모니터가 (일반적으로) 초당 60번 밖에 표시하지 못하기 때문에 재수 없게 지우는 순간이 걸리면 지워진 그림이 1/60초동안 보인다는 이야기입니다.

근본적인 원인은, 화면을 지우는 과정, 선을 그리는 과정 등 '과정'을 사용자에게 보여주기 때문입니다.
결과를 얻기 위한 과정도 중요하지만, 그림을 그릴 때만은 과정은 무시하고 결과만 보여주는 것도 한 방법이 될 수 있습니다.

이 문제를 해결하려면, '지움'과 동시에 '그리기'를 해줘야 하지만, 그렇게 할 수 있는 명령어가 없으며, 직접 구현하려면 점(픽셀)을 하나 하나 건드려주는 식으로 가야 합니다.
가장 깔끔한 해결책은 '과정'을 안 보이는 곳에서 다 해결한 다음 '결과'만 보여주는 것입니다.

그려줄 곳과 똑같은 크기로 안 보이는 그림판 따위를 만드시고, 그리고자 하는 그림판과 똑같이 만들어주고, 우선 여기에 모든 것을 그립니다.
그리고 마지막에 여기에 그려준 것을 바로 보이는 그림판에 옮겨주면 됩니다.
이렇게 하면 원래 있던 그림에 새 그림을 덮어 쓰기 때문에 '지우는 과정'이 생략되므로 깜빡임이 발생하지 않습니다. 이러한 기법을 이중 버퍼링(Double Buffering)이라 합니다.

대신 이 방법을 쓰면 찢어짐(Tearing)이란 현상이 발생할 수도 있는데, 보이는 그림판으로 그림을 옮기는 과정에서 절반 밖에 못 옮겼을 때 화면에 표시되면, 남아있던 원래 그림과 새로 덮어 그리는 원래 화면에 절반씩 섞여있는 모양으로 보일 것입니다. 그렇지만 대부분의 경우 화면을 확 지우는 등 극적으로 바뀌는게 아니라 기존 그림에서 조금 더 바뀐 형태인 경우가 대부분이기 때문에, 그림이 전체적으로 약간 비틀린듯한 느낌을 주게 됩니다. 그래서 이 현상을 Tearing이라 합니다.

그렇지만 Tearing은 크게 눈에 띄지도 않고 게임처럼 화면이 실시간으로 바뀌지 않는 이상 크게 문제될 것이 없습니다.

일부러 길게 썼는데, 결론은 화면에 보이는 그림판에 작업하지 마시고, 안 보이는 그림판에 작업하신 다음 보이는 그림판에 한 번에 옮기시면 되며, 이러한 기법을 Double Buffering이라 한다는 것입니다.

참고가 되셨길 바랍니다.

paintj   2011-06-13 PM 5:38:47  
정확히 어떻게 해결해야 하는지 감이 안오네요ㅠㅠ

기존 프로그램을 버전업하면서 아예 새로 만들고 있는데, 이상하게 같은 명령어를 사용함에도 불구하고 기존의 프로그램은 깜박임이 없고, 새로 만들고 있는 프로그램에는 깜박임이 발생합니다.

기존 프로그램에는

그림판 마우스버튼을 누를때

그림판0.배경.펜이동(X, Y);
눌림:=참;

마우스버튼을 뗄때

그림판0.배경.선그려(X, Y);
눌림:=거짓;

마우스를 움직일때

만일(눌림) {
그림판0.배경.선그려(X, Y);
}

그리고 초기화 명령어로

진리:눌림;

으로 그림 그리는 기능을 구현하고 있습니다.

기존 프로그램에서는 깜박임이 전혀 없는데, 새로 만드니까 이상하게 깜박임이 발생하네요...
paintj   2011-06-13 PM 5:43:01  
그리고 말씀해주신 더블 버퍼링을 시도해보려고 기존 그림판과 같은위치 아래에 같은 그림판을 복사 붙여넣기 해서 깔아버리고 명령어를

마우스버튼을 누를때

그림판1.배경.펜이동(X, Y);
그림판0.그림.할당해(그림판1.그림);
눌림:=참;

마우스버튼을 뗄때

그림판1.배경.선그려(X, Y);
그림판0.그림.할당해(그림판1.그림);
눌림:=거짓;

마우스를 움직일때

만일(눌림) {
그림판1.배경.선그려(X, Y);
그림판0.그림.할당해(그림판1.그림);
}

으로 해봤는데 아예 그려지지를 않네요^^;

펜 색상이라던가 폭은 당연히 설정해 둔 상태입니다...
지상현   2011-06-13 PM 9:55:00  
http://cugz.sjworks.net/bbs/zboard.php?id=pds_sc&no=824
예제를 따로 만들려 했는데, 여유가 없어서 기존 코드로 대신합니다.
위 코드는 드래그 해서 원을 그리는 부분이 있는데, 아마 원하시는게 이런게 아닐까 합니다. 참고하세요.
LIST ALL               GO TO THE TOP


N
Category
   Subject
Posted by
Date
H
2056 창조
   미로 충돌 구현 [2]
김대명 2011/08/30  3258
2055 창조
   미로 생성 [1]
성인e 2011/08/18  7942
2054 창조
   창조로 전역후킹하기 [2]
김대명 2011/08/11  3423
2053 창조
   하노이의 탑 원리와... 프로그래밍 [2]
신용주 2011/07/30  4165
2052 창조
   mdb 일련번호 초기화 방법좀 부탁드립니다.. [2]
권선중 2011/07/13  7641
2051 창조
     [re] mdb 일련번호 초기화 방법좀 부탁드립니다.. [2]
권선중 2011/07/14  5011
2050 창조
       질의 명령 실행후 테이블이 내용이 변경이 되...
권선중 2011/07/15  4542
2049 창조
         [re] 질의 명령 실행후 테이블이 내용이 변경이 ... [1]
지상현 2011/07/15  3733
2048 창조
   양력을 음력으로 변환하는 방법은 없나요? [3]
김대명 2011/07/12  3290
2047 창조
     자바 양력->음력 변환 소스 [1]
김대명 2011/07/13  5491
2046 창조
   비주얼 베이직 6에서 창조용 DLL 만들기 [2]
김대명 2011/06/21  6227
2045 창조
   ...
.. 2011/06/12  4325
창조
     [re] 그림판 깜빡임 문제 질문드립니다 [3]
지상현 2011/06/13  5057
2043 창조
   원주율(파이) 구하기 [4]
김대명 2011/05/26  4080
2042 창조
   다른프로그램입력내용받기
만물 2011/05/24  3565
2041 창조
   도저히 안되서 여기에 질문합니다.
김대명 2011/05/20  3519
2040 창조
     [re] 도저히 안되서 여기에 질문합니다. [3]
성인e 2011/05/20  3589
2039 기타
   도와주세요..
이민수 2011/05/13  3589
2038 창조
   백신프로그램이 바이러스르 오진하는데 해결... [4]
이희창 2011/04/28  3047
2037 창조
   도움말파일이 윈7에서 열리지 않습니다. [2]
이희창 2011/04/10  3691
2036 창조
   SQL 연결시 비번을 물어보는데.. [1]
권선중 2011/03/31  4846
2035 창조
   파일찾아 의 한계.. [2]
박재성 2011/03/25  4703
2034 창조
   filetr32.dll 포트수정 [1]
유형종 2011/02/28  6145
2033 창조
   문법검사 합격인데 왜 컴파일이 안되나요? [3]
김대명 2011/02/24  3751
2032 창조
   윈도우 종료시... 또는 시작시... [3]
신용주 2011/02/06  4334
LIST ALL   Prev [1][2][3][4] 5 [6][7][8][9][10]..[87] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인