장성호 님이 쓰신 글 :
: 질문을 잘 이해 못하겠네요
: 한번 사각형을 그리고 ... (MouseUp까지 한후에)
: 다시 사각형을 그렸을때 (mouse down->move->up ) 이전에 사각형을 지우고 싶다..
: 뭐 그런것인가요?
:
:
방법1
: 님께서 사각형을 그릴때 맨 마지막은(MouseUp에서) Pen->Mode가 pmCopy 입니다.
: copy모드에서는 아랫쪽에 이미지 정보가 완전히 없어집니다.
:
: MouseUp때도 Pen->Mode를 pmNotXor 로 해서 그렸다가
: 위치 저장해두고
: 다시 그렸을때 다시 pmNotXor로 한번 더그리면 사라지겠죠
:
:
방법2
: 또 다른 방법은 ..
: 윈본 이미지를 따로 저장해 두는 것입니다.
: PenMode가 pmCopy로 해서 아무리 그리더라도 원본 이미지를 따로 저장해두었으니
: 복구하는것은 문제가 없죠
:
:
: 일반적으로 두번째 방법을 많이 씁니다.
: 아시겠지만 Xor나 NotXOr로 사각형을 그렸을때는 설정한 Pen-Color 그대로 나타는것이 아니기 때문이죠
:
:
: 그럼..
:
:
: 왕초보 님이 쓰신 글 :
: : 폼 > panel > 이미지 위에 아래 배경은 보인 상태에서 사각 라인만을 그립니다.
: : 이미지 중 일부분을 사각형으로 취하는 프로그램을 만들려고 합니다.
: : 잘못 선택한 부분은 다시 마우스로 선택하여 이미지 사각형을 다시 만들려고 합니다.
: :
: : 1. 마우스로 라인을 그려서 사각형을 그립니다.
: :
: : 2. 다시 마우스로 라인을 그리면 기존 사각형은 사라지고
: : 현재 다시 그린 사각형만 이미지 위에 존재 합니다.
: :
: :
: :
: : 헤더
: : //1.마우스 드래그 rectangle
: : TPoint FirstPoint; //초기점
: : TPoint LastPoint; //현재위치
: : bool Dragging;
: :
: : 이미지 마우스 다운
: : void __fastcall TForm3::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
: : {
: : if (Shift.Contains(ssLeft)) //좌측마우스가 눌렸을 경
: : {
: : FirstPoint.x = X;
: : FirstPoint.y = Y;
: : LastPoint.x = X;
: : LastPoint.y = Y;
: : Image1->Canvas->MoveTo(X, Y);
: : Dragging = true;
: : }
: : }
: :
: : void __fastcall TForm3::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
: : {
: : if (Dragging && Shift.Contains(ssLeft)) {
: : Image1->Canvas->Pen->Mode = pmNotXor;
: : Image1->Canvas->Brush->Style = bsClear;
: : Image1->Canvas->Rectangle(FirstPoint.x,FirstPoint.y,LastPoint.x,LastPoint.y);
: :
: : Image1->Canvas->Rectangle(FirstPoint.x,FirstPoint.y,X,Y);
: :
: : LastPoint.x = X;
: : LastPoint.y = Y;
: : }
: : }
: :
: : void __fastcall TForm3::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
: : int X, int Y)
: : {
: :
: : Image1->Canvas->Pen->Color = clBlue;
: : Image1->Canvas->Pen->Width = 4;
: :
: : if (Dragging)
: : {
: : Image1->Canvas->Pen->Mode = pmCopy;
: : Image1->Canvas->Rectangle(FirstPoint.x,FirstPoint.y,X,Y);
: : }
: : Dragging = false;
: : }
: :
: :
: :
: :
: :
: : 위의 소스에서 장성호님이 알려주신 대로 하면 각이벤트에 넣어 봤지만 지워지지 않습니다.
: :
: :
: :
: :
: : 장성호 님이 쓰신 글 :
: : : 기존 그림을 전체 삭제 하려면?
: : :
: : : 삭제한다기 보다
: : : 흰색으로 전체에 사각형을 그리면 되죠
: : :
: : :
: : : Image1->Canvas->Brush->Color=clWhite;
: : : Image1->Canvas->Brush->Style=bsSolid;
: : : Image1->Canvas->Pen->Color=clWhite;
: : : Image1->Canvas->Pen->Style=psSolid;
: : : Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
: : :
: : : //Bursh나 Pen의 Color나 Style을 원하는 대로 바꿔서...
: : : Image1->Canvas->Rectangle(sqrPoint[0].x, sqrPoint[0].y, sqrPoint[1].x,sqrPoint[1].y);
: : :
: : :
: : :
: : :
: : :
: : : 그럼..
: : :
: : :
: : :
: : :
: : :
: : : 왕초보 님이 쓰신 글 :
: : : : 폼에 이미지를 올려놓고
: : : :
: : : : 이미지 위에 사각형 그림을 그릴려고 합니다.
: : : : Image1->Canvas->Rectangle(sqrPoint[0].x, sqrPoint[0].y, sqrPoint[1].x,sqrPoint[1].y);
: : : :
: : : : 문제는
: : : : 먼저 있는 그림은 지우고
: : : : 다시 그리려고 하는데
: : : :
: : : : 마우스 드래그가 끝난후 up 할때 기존 내용 지우고 지금것으로 업데이트 하고 싶습니다.
: : : :
: : : : 마우스로 그림은 그려지는데 기존것을 어떻게 지워야 하는지 모르겠습니다.