안녕 하세요? BacTeria 박종민 입니다.
오늘은 Anti-Aliasing 처리된 글자 출력 방법에 대한 팁입니다.
그냥 Canvas에 Text를 출력할 경우엔 글자의 외곽 부분이 거칠게 표현이 되는데 반해 Anti-Aliasing 처리를 하게 되면 부드럽게 표현이 됩니다.
자세한 설명은 아래의 코드로 대체 하겠습니다.
그럼 이만...
- 박종민 드림...
PS. 델파이 만만세!! ㅋㅋ
var
Form1: TForm1;
OldFont, NewFont: HFont;
implementation
{$R *.DFM}
procedure PrepareText(Canvas: TCanvas);
var
FontName: string[255];
begin
{-- Sets the font ----------------------------------------}
FontName := Canvas.Font.Name+#0;
NewFont := CreateFont(
{ Height } Canvas.Font.Height,
{ Width } 0,
{ Escapement } 0,
{ Orientation } 0,
{ Weight } Ord(fsBold in Canvas.Font.Style)*FW_BOLD,
{ Italic } Ord(fsItalic in Canvas.Font.Style),
{ Underline } Ord(fsUnderLine in Canvas.Font.Style),
{ StrikeOut } Ord(fsStrikeOut in Canvas.Font.Style),
{ CharSet } DEFAULT_CHARSET,
{ OutputPrec. } OUT_DEFAULT_PRECIS,
{ ClipPrec. } CLIP_DEFAULT_PRECIS,
{ Quality } ANTIALIASED_QUALITY,
{ Picth } DEFAULT_PITCH + FF_DONTCARE,
{ FaceName } @FontName[1]);
OldFont := SelectObject(Canvas.Handle, NewFont);
Canvas.Brush.Style := bsClear;
end;
procedure UnprepareText(Canvas: TCanvas);
begin
SelectObject(Canvas.Handle, OldFont);
DeleteObject(NewFont);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Font.Size := 100;
Canvas.TextOut(10, 10, 'Test String...');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PrepareText(Canvas);
Canvas.Font.Size := 100;
Canvas.TextOut(10, 210, 'Test String...');
UnPrepareText(Canvas);
end;
|