|
반대로 구현을 하시는게 훨씬 빠르지 않을까 싶네요.
우선, 검은색 배경을 모두 칠하고, 비트맵으로 원래의 이미지를 저장한 다음,
마우스 움직임에 따라서 비트맵에서 연산을 해서 원하는 부분을 잘라와서, 검은 화면 위에 뿌려주는 방식입니다.
하느리 님이 쓰신 글 :
: 안녕하세요.
:
: 현재 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 ()부분에서 화면 번쩍임 현상이 발생한다는 것입니다. 이를 해결할 수 있는 방법이 없을까요 ?
:
|