Q&A

  • 그림 그리기는 어떻게,,,
그림을 그릴려고 하는데요, 비트맵을 선언해서 해야 하나요 아니면

캔버스를 선언해서 해야하나요?

캔버스에도 비트맵이 있고 비트맵에도 캔버스가 있던데, 잘 모르겠더라구요.

둘다 상관 없나요?



그리고요, 직선은 그릴수 있는데, 곡선은 어떻게 하면 그릴수 있는지 궁금 합니다.

책을 봐도 곡선 그리는것은 없던데,,,

베지어 함수가 있긴 한데, 제가 쓸줄몰라 직선밖엔 안그려 지네요.

곡선 그리는법좀 알려 주세요.



1  COMMENTS
  • Profile
    김영대 1999.08.11 00:17
    초보델피언 께서 말씀하시기를...

    > 그림을 그릴려고 하는데요, 비트맵을 선언해서 해야 하나요 아니면

    > 캔버스를 선언해서 해야하나요?

    > 캔버스에도 비트맵이 있고 비트맵에도 캔버스가 있던데, 잘 모르겠더라구요.

    > 둘다 상관 없나요?

    >

    > 그리고요, 직선은 그릴수 있는데, 곡선은 어떻게 하면 그릴수 있는지 궁금 합니다.

    > 책을 봐도 곡선 그리는것은 없던데,,,

    > 베지어 함수가 있긴 한데, 제가 쓸줄몰라 직선밖엔 안그려 지네요.

    > 곡선 그리는법좀 알려 주세요.

    >



    // 아래의 Canvas를 Bitmap.Canvas 로 바꾸어서 사용해 보세요

    unit Draw1f;



    interface



    uses

    SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

    Forms, Dialogs;



    type

    TForm1 = class(TForm)

    procedure FormPaint(Sender: TObject);

    procedure FormResize(Sender: TObject);

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.FormPaint(Sender: TObject);

    var

    Count, Current, Step: Integer;

    R: TRect;

    begin

    // ClientRect는 Rect(0, 0, ClientWidth, ClientHeight) 와 동일한 효과

    R := ClientRect;

    InflateRect(R, -10, -10); // R영역을 감소한다



    {폼의 바탕을 색칠한다}

    Canvas.Brush.Color := clYellow;

    Canvas.Pen.Color := clBlack;

    Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);



    {폼에 수평선들을 그린다}

    Step := 15;

    Current := Succ(Step);

    Canvas.Pen.Color := clLime;

    while Current < R.Bottom do

    begin

    Canvas.MoveTo(Succ(R.Left), Current);

    Canvas.LineTo(Pred(R.Right), Current);

    Inc(Current, Step);

    end;



    {폼에 수직선들을 그린다}

    Step := 3;

    Current := 85;

    Canvas.Pen.Color := clRed;

    for Count := 1 to 2 do

    begin

    Canvas.MoveTo(Current, Succ(R.Top));

    Canvas.LineTo(Current, Pred(R.Bottom));

    Inc(Current, Step);

    end;



    {Ellipse을 몇개 그린다}

    with Canvas do

    begin

    Pen.Color := clBlack;

    Brush.Color := clFuchsia;

    Ellipse(230,40,360,60);

    Brush.Color := clAqua;

    Ellipse(200,40,260,90);

    Brush.Color := clPurple;

    Ellipse(220,20,300,80);

    end;



    {Rectangle을 몇개 그린다}

    with Canvas do

    begin

    Pen.Color := clBlack;

    Brush.Color := clRed;

    Rectangle(130,120,230,160);

    Brush.Color := clWhite;

    Rectangle(100,110,160,140);

    Brush.Color := clBlue;

    Rectangle(120,100,200,130);

    end;



    {Polylines을 몇개 그린다}

    with Canvas do

    begin

    Pen.Width := 3;

    Pen.Color := clBlack;

    PolyLine([Point(230,240),Point(250,200),Point(210,220),

    Point(300,160),Point(280,240),Point(230,240)]);

    Pen.Color := clFuchsia;

    PolyLine([Point(360,230),Point(230,210),Point(260,250),

    Point(190,210),Point(240,190),Point(360,230)]);

    end;



    {글자를 몇개 그린다}

    with Canvas do

    begin

    Brush.Style := bsClear;

    TextOut(120,50, 'Ellipses');

    TextOut(250,130, 'Rectangles');

    TextOut(120,210, 'Polylines');

    Brush.Style := bsSolid;

    end;

    end;



    procedure TForm1.FormResize(Sender: TObject);

    begin

    Invalidate;

    end;



    end.