Antialiased Drawing을 할려면 GDI가 아닌 GDI+ 함수를 이용해야 합니다.
컴포넌트 자체는 TImage를 그냥 쓰도 되지만 TImage의 Canvas에 드로잉하는 함수들을
GDI+ 함수를 이용해야 합니다.
GDI+를 델파이에서 쉽게 쓸 수 있도록 만들어진 API가 있으니 찾아보시고 (Delphi GDIPLUS로 검색)
델파이용은 아니지만 GDI+에 대해 한국어로 만든 상세한 설명자료는 다음 URL에서 볼 수 있습니다.
target=_blank>http://www.winapi.co.kr/project/library/gdiplus/gdiplus.htm
그리고 GDI+ 함수에는 RoundRect 함수가 없습니다만 아래 코드를 이용하면 됩니다.
function CreateRoundRectangle(rectangle: TGPRect; radius: integer): TGPGraphicsPath;
var
path : TGPGraphicsPath;
l, t, w, h, d : integer;
begin
path := TGPGraphicsPath.Create;
l := rectangle.X;
t := rectangle.y;
w := rectangle.Width;
h := rectangle.Height;
d := radius shl 1; // divide by 2
// the lines beween the arcs are automatically added by the path
path.AddArc(l, t, d, d, 180, 90); // top left
path.AddArc(l + w - d, t, d, d, 270, 90); // top right
path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottom right
path.AddArc(l, t + h - d, d, d, 90, 90); // bottom left
path.CloseFigure();
result := path;
end;
위에서 얻어진 TGPGraphicsPath를 갖고 실제로 드로잉하는 함수 DrawPath 또는 FillPath를 실행하면 됩니다.
컴포넌트 자체는 TImage를 그냥 쓰도 되지만 TImage의 Canvas에 드로잉하는 함수들을
GDI+ 함수를 이용해야 합니다.
GDI+를 델파이에서 쉽게 쓸 수 있도록 만들어진 API가 있으니 찾아보시고 (Delphi GDIPLUS로 검색)
델파이용은 아니지만 GDI+에 대해 한국어로 만든 상세한 설명자료는 다음 URL에서 볼 수 있습니다.
target=_blank>http://www.winapi.co.kr/project/library/gdiplus/gdiplus.htm
그리고 GDI+ 함수에는 RoundRect 함수가 없습니다만 아래 코드를 이용하면 됩니다.
function CreateRoundRectangle(rectangle: TGPRect; radius: integer): TGPGraphicsPath;
var
path : TGPGraphicsPath;
l, t, w, h, d : integer;
begin
path := TGPGraphicsPath.Create;
l := rectangle.X;
t := rectangle.y;
w := rectangle.Width;
h := rectangle.Height;
d := radius shl 1; // divide by 2
// the lines beween the arcs are automatically added by the path
path.AddArc(l, t, d, d, 180, 90); // top left
path.AddArc(l + w - d, t, d, d, 270, 90); // top right
path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottom right
path.AddArc(l, t + h - d, d, d, 90, 90); // bottom left
path.CloseFigure();
result := path;
end;
위에서 얻어진 TGPGraphicsPath를 갖고 실제로 드로잉하는 함수 DrawPath 또는 FillPath를 실행하면 됩니다.