C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23332] Re:Re:Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기
하느리 [handebug] 1066 읽음    2002-12-23 16:15
답변 감사합니다.

코딩상에서 jpg를 로드하여 발생하는 문제였습니다.
일단 처리를 해 보았는데, 그래도 새로 그리는 부분의 내용이 계속해서 번쩍이네요.
그래서 최악의 방법으로,
4개의 판넬(TPanel)에다 검은색을 두고 특정영역만을 제외하고 각각의 판넬을 그리는 형태로 처리하였습니다.



유영인.Chris 님이 쓰신 글 :
: 이미지를 디버깅 상태에서 로드하셔서 사용하시 마시구요... 런타임에서 직접 그려보세요. jpg 등과 같은 picture 파일을 로드시키시면, 나중에 canvas에 그릴수가 없습니다.
:
: 만약, 작업이 빈번하다면, paintbox등과 같은 것을 image 위에 올려놓으시는 것도 하나의 방법입니다.
:
: ^^;
:
:
:
: 하느리 님이 쓰신 글 :
: : 우선 답변주셔서 감사합니다.
: : 영인님 조언에 따라 아래와 같이 수정하여 보았습니다.
: : 제가 어딘가 잘못한 것 같은데, 이렇게 할 경우, 그림을 잘라오는 곳에서 오류가 발생합니다.
: : 오류메세지는,
: : "Can only modify an image if it contains a bitmap"
: : 무엇이 잘못된 것인지 모르겠습니다.
: : 오류가 발생하는 부분은 BitBlt 부분입니다.
: :
: : Image1은 아래쪽에 있는 그림입니다.
: : void __fastcall TForm1::Draw_Blank(int x, int y)
: : {
: :     // 전체 검은색 칠하기
: :     TRect   r;
: :     PB_Draw->Canvas->Pen->Width   = 5;
: :     PB_Draw->Canvas->Pen->Color   = clBlack;
: :     PB_Draw->Canvas->Pen->Mode    = pmCopy;
: :     PB_Draw->Canvas->Pen->Style   = psSolid;
: :     PB_Draw->Canvas->Brush->Color = clBlack;
: :     PB_Draw->Canvas->Brush->Style = bsSolid;
: :     r.left = 0;
: :     r.top  = 0;
: :     r.right = Screen->Width;
: :     r.bottom = Screen->Height;
: :     PB_Draw->Canvas->Rectangle (r);
: :
: :     // 특정영역 복사
: :     Graphics::TBitmap *bg_bmp = new Graphics::TBitmap ();
: :     bg_bmp->Width = 100;
: :     bg_bmp->Height = 100; //btimap 이미지의 영역크기(메모리) 변경
: : //    bg_bmp->Dormant();
: : //    bg_bmp->FreeImage();
: :     BitBlt (bg_bmp->Canvas->Handle, 0, 0, bg_bmp->Width, bg_bmp->Height,
: :             Image1->Canvas->Handle, x, y, SRCCOPY); // 오류발생부분
: :
: :     PB_Draw->Canvas->Draw (x, y, bg_bmp);
: : //    bg_bmp->ReleaseHandle();
: :     delete bg_bmp;
: : }
: :
: :
: :
: :
: : 유영인.Chris 님이 쓰신 글 :
: : : 반대로 구현을 하시는게 훨씬 빠르지 않을까 싶네요.
: : :
: : : 우선, 검은색 배경을 모두 칠하고, 비트맵으로 원래의 이미지를 저장한 다음,
: : :
: : : 마우스 움직임에 따라서 비트맵에서 연산을 해서 원하는 부분을 잘라와서, 검은 화면 위에 뿌려주는 방식입니다.
: : :
: : :
: : :
: : : 하느리 님이 쓰신 글 :
: : : : 안녕하세요.
: : : :
: : : : 현재 PaintBox를 이용하여 그림을 처리하는 툴을 만들고 있는데, 마우스의 움직임에 따라 특정영역을 제외한 부분을 검은색으로 칠하는 것을 만들고 있습니다. 왜 이렇게 하느냐 하면, PaintBox 아래쪽에 있는 그림의 특정부분만을 볼려고 하는 것입니다.
: : : :
: : : : 우선 소스를 올립니다. 여기서 PB_Draw가 PaintBox입니다. 폼은 화면전체크기사이즈입니다.
: : : :
: : : : void __fastcall TForm1::PB_DrawMouseMove(TObject *Sender,
: : : :       TShiftState Shift, int X, int Y)
: : : : {
: : : :     Form1->DoubleBuffered = true;
: : : :     Draw_Blank (X, Y);
: : : : }
: : : : void __fastcall TForm1::Draw_Blank(int x, int y)
: : : : {
: : : :     TRect   r;
: : : :     PB_Draw->Refresh (); // 현재 그려져 있는 부분을 지우기
: : : :
: : : :     PB_Draw->Canvas->Pen->Width   = 5;
: : : :     PB_Draw->Canvas->Pen->Color   = clBlack;
: : : :     PB_Draw->Canvas->Pen->Mode    = pmCopy;
: : : :     PB_Draw->Canvas->Pen->Style   = psSolid;
: : : :     PB_Draw->Canvas->Brush->Color = clBlack;
: : : :     PB_Draw->Canvas->Brush->Style = bsSolid;
: : : :
: : : :     r.left      = 0;
: : : :     r.top       = 0;
: : : :     r.right     = Screen->Width;
: : : :     r.bottom    = y;
: : : :     PB_Draw->Canvas->Rectangle (r);
: : : :
: : : :     r.left      = 0;
: : : :     r.top       = y;
: : : :     r.right     = x;
: : : :     r.bottom    = y+100;
: : : :     PB_Draw->Canvas->Rectangle (r);
: : : :
: : : :     r.left      = x+100;
: : : :     r.top       = y;
: : : :     r.right     = Screen->Width;
: : : :     r.bottom    = y+100;
: : : :     PB_Draw->Canvas->Rectangle (r);
: : : :
: : : :     r.left      = 0;
: : : :     r.top       = y+100;
: : : :     r.right     = Screen->Width;
: : : :     r.bottom    = Screen->Height;
: : : :     PB_Draw->Canvas->Rectangle (r);
: : : : }
: : : :
: : : : 여기서 문제는 PB_Draw->Refresh ()부분에서 화면 번쩍임 현상이 발생한다는 것입니다. 이를 해결할 수 있는 방법이 없을까요 ?
: : : :

+ -

관련 글 리스트
23326 [질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 하느리 866 2002/12/23
23327     Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 유영인.Chris 1068 2002/12/23
23328         Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 하느리 1766 2002/12/23
23329             Re:Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 유영인.Chris 1704 2002/12/23
23332                 Re:Re:Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 하느리 1066 2002/12/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.