|
이미지를 디버깅 상태에서 로드하셔서 사용하시 마시구요... 런타임에서 직접 그려보세요. 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 ()부분에서 화면 번쩍임 현상이 발생한다는 것입니다. 이를 해결할 수 있는 방법이 없을까요 ?
: : :
|