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
[23329] Re:Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기
유영인.Chris [cuperido] 1704 읽음    2002-12-23 15:38
이미지를 디버깅 상태에서 로드하셔서 사용하시 마시구요... 런타임에서 직접 그려보세요. 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를 이용하여 특정영역을 제외하고 그리기 하느리 1767 2002/12/23
23329             Re:Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 유영인.Chris 1704 2002/12/23
23332                 Re:Re:Re:Re:[질문] PaintBox를 이용하여 특정영역을 제외하고 그리기 하느리 1067 2002/12/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.