음...
TCanvas의
Polygon 함수를 이용하면 쉽게 구현이 가능할듯 한데요...
[샘플소스]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
this->DoubleBuffered=true;
Image1->Canvas->Rectangle(Rect(0,0,Image1->Width,Image1->Height));
}
//---------------------------------------------------------------------------
TPoint stPt1,stPt2;
int iPBrushWid=3;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
stPt1=Point(X-iPBrushWid,Y-iPBrushWid);
stPt2=Point(X+iPBrushWid,Y+iPBrushWid);
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Brush->Color=clBlack;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(Shift.Contains(ssLeft))
{
TPoint cuPt1,cuPt2,cuPt3,cuPt4;
cuPt1=Point(X-iPBrushWid,Y-iPBrushWid);
cuPt2=Point(X+iPBrushWid,Y+iPBrushWid);
TPoint p[5]={stPt1,stPt2,cuPt2,cuPt1,stPt1};
Image1->Canvas->Polygon(&p[0],4);
stPt1=cuPt1;
stPt2=cuPt2;
}
}
위와같이 하면 왼쪽 위에서 오른쪽 아래로 빗금의 펜브러쉬가 구현됩니다.
[Size]
iPBrushWid 값을 조정하면 크기가 조정되구
[방향]
cuPt1 ,cuPt2를 구할때
y값에 +/- iPBrushWid의 방향을 바꿔버리면 빗금의 방향이 바뀌어 버릴것입니다.
[사각형 Pen브러쉬]
사각형이 좀 문제이긴 한데..
위 방식을 응용하면 쉽게 구현 가능합니다.
그럼..
rivers 님이 쓰신 글 :
: 윈도우즈 그림판 브러시를 보면 사각형과, 점,
: 대각선으로 브러시 모양을 선택할 수 있습니다.
: 점이야 펜의 굵기를 늘리면 사용할 수 있지만
: 사각형이나 대각선은 어떤식으로 구현해야 할지
: 감을 못잡겠습니다.
: 사각형의 브러시 모양을 만들어 보려고 마우스가 움직일때마다
: 좌표를 따와서 일정크기의 사각형을 계속 그려줬는데
: 마우스를 빠르게 움직이면 선이 되는게 아니라
: 드문드문 사각형이 나오는 형태로 되더군요.
:
: 이것을 구현한 예제파일이 있으시면 부탁드립니다.