TGraphic은 TBitmap의 상위 클래스로, 대부분의 이미지 처리 함수의 파라미터로 사용되지만 실제 인스턴스는 TBitmap을 주로 사용합니다.
TBitmap은 TGraphic에서 상속받은 기능을 활용하며, Width/Height 속성, 파일 입출력 메서드, Palette 및 투명도 설정 등이 포함됩니다.
TGraphic 예제:
var
graphic: TGraphic;
begin
graphic := TBitmap.Create;
graphic.LoadFromFile('c:\temp\test.bmp');
Self.Canvas.StretchDraw(ClientRect, graphic);
graphic.Free;
end;
TCanvas는 그래픽 출력을 위한 표면 객체로, 원, 사각형, 펜, 브러시 등의 그리기 기능을 제공합니다.
컨트롤의 Canvas 속성은 TCanvas 타입으로, 다음 예제처럼 사용 가능합니다:
var
canvas: TCanvas;
begin
canvas := Self.Canvas;
canvas.Brush.Color := clYellow;
canvas.Font.Color := clRed;
canvas.Font.Name := 'Gulim';
canvas.Font.Style := [fsBold];
canvas.Font.Size := 24;
canvas.TextOut(10, 10, 'Delphi 블로그');
end;
일부 컨트롤은 직접적인 Canvas 속성을 제공하지 않지만, TCanvas를 통해 그래픽 표면에 접근할 수 있습니다.
예를 들어 TPanel과 TButton은 Canvas 속성이 없지만, GetDC 함수를 통해 다음과 같이 처리할 수 있습니다:
var
canvas: TCanvas;
begin
canvas := TCanvas.Create;
canvas.Handle := GetDC(Panel1.Handle);
canvas.Pen.Width := 2;
canvas.Pen.Color := clRed;
canvas.Brush.Color := clYellow;
canvas.Rectangle(5, 5, 50, 30);
canvas.Free;
end;
TBitmap은 TGraphic 기능을 상속받으면서 자체적으로 TCanvas를 포함하고 있어 이미지 처리와 그리기 기능을 병행할 수 있습니다.
다음 예제는 TBitmap을 사용한 이미지 생성 및 출력을 보여줍니다:
var
bitmap: TBitmap;
begin
bitmap := TBitmap.Create;
bitmap.LoadFromFile('c:\temp\test.bmp');
bitmap.Canvas.Brush.Style := bsClear;
bitmap.Canvas.Pen.Color := clRed;
bitmap.Canvas.Pen.Width := 2;
bitmap.Canvas.Ellipse(2, 2, 88, 66);
Self.Canvas.Draw(0, 0, bitmap);
bitmap.Free;
end;
TPicture는 다양한 이미지 포맷(ICO, WMF 등)을 지원하기 위해 설계된 클래스로, TGraphic, TCanvas, TBitmap의 기능을 모두 활용합니다.
TPicture의 LoadFromFile 메서드는 내부적으로 TGraphic을 호출하며, 그래픽 그리기는 TPicture.Bitmap.Canvas를 통해 수행됩니다.
다음 예제는 TPicture를 사용해 크로스 아이콘을 생성하고 저장하는 방법을 보여줍니다:
var
picture: TPicture;
begin
picture := TPicture.Create;
picture.Bitmap.SetSize(32, 32);
picture.Bitmap.Canvas.Pen.Color := clRed;
picture.Bitmap.Canvas.Pen.Width := 8;
picture.Bitmap.Canvas.MoveTo(0, 16);
picture.Bitmap.Canvas.LineTo(32, 16);
picture.Bitmap.Canvas.MoveTo(16, 0);
picture.Bitmap.Canvas.LineTo(16, 32);
Self.Canvas.Draw(4, 4, picture.Graphic);
picture.SaveToFile('c:\temp\test.ico');
picture.Free;
end;
TImage는 이미지 표시에 최적화된 컨트롤로 TPicture를 포함하며, TControl 계열의 기본 기능(이벤트, 메시지 처리 등)도 제공합니다.
TPaintBox는 이미지 처리 기능이 없어 TCanvas만 포함하며, TControl 계열의 상호작용 기능을 지원합니다.
TImage는 TPaintBox보다 기능이 더 많지만, 단순한 그래픽 작업에는 TPaintBox가 더 경량적입니다.