다.안티 알리아싱
GDI+의 텍스트 출력 기능이 GDI에 비해 우월한 점이라면 안티 알리아싱(Anti Aliasing)을 들 수 있다. 텍스트가 출력되는 배경색과 텍스트의 색상이 현격하게 차이가 날 경우 텍스트의 획에 계단 현상이 나타나게 된다. 해상도가 아주 낮은 모니터에서 흰 바탕에 검정색 문자열을 출력해 보면 이런 계단 현상은 쉽게 확인할 수 있다.
안티 알리아싱은 이처럼 경계 부근의 색상차가 심할 때 경계에 중간색을 삽입함으로써 텍스트의 출력 품질을 높이는 기술이다. 예를 들어 흰색과 검정색 사이에 회색을 출력하면 마치 붓으로 쓴 글처럼 문자열이 훨씬 더 부드럽게 보인다. 문자열 출력 속성은 Graphics 객체의 속성이며 다음 멤버 함수로 설정한다.
Status SetTextRenderingHint(TextRenderingHint newMode);
물론 출력 속성의 설정 상태를 조사하는 Get 함수도 있다. 5가지 출력 품질을 지정하는 열거형 중 하나를 지정한다.
typedef enum {
TextRenderingHintSystemDefault = 0,
TextRenderingHintSingleBitPerPixelGridFit = 1,
TextRenderingHintSingleBitPerPixel = 2,
TextRenderingHintAntiAliasGridFit = 3,
TextRenderingHintAntiAlias = 4,
TextRenderingHintClearTypeGridFit = 5
} TextRenderingHint;
값이 작을수록 품질은 떨어지지만 출력 속도는 빠르며 값이 높아질수록 품질은 좋아지지만 속도는 그만큼 느려질 것이다. 가장 출력 품질이 좋은 ClearType은 XP와 2003 이후에서만 사용할 수 있으며 나머지 운영체제에서는 무시된다. 다음 테스트 코드는 출력 품질을 바꿔 가며 똑같은 문자열을 여섯 번 출력한다.
void OnPaint(HDC hdc)
{
Graphics G(hdc);
Font F(L"궁서",30,FontStyleRegular,UnitPixel);
PointF P(10.0f,0.0f);
SolidBrush B(Color(0,0,0));
int i;
for (i=0;i<=5;i++) {
G.SetTextRenderingHint((TextRenderingHint)i);
G.DrawString(L"Anti Aliasing Test 글자를 부드럽게 출력한다.",-1,&F,P,&B);
P.Y+=33;
}
}
출력 결과를 자세히 관찰해 보면 획과 경계가 만나는 부분의 처리가 조금씩 다르다는 것을 확인할 수 있다. CRT는 원래 빛이 흐려지는 효과가 있으므로 안티 알리아싱을 하지 않아도 별 문제가 없었지만 현재는 LCD같은 고해상도의 선명한 출력 장치들이 개발됨으로써 과거에 비해 문자열을 깔끔하게 출력하는 것이 아주 중요한 문제가 되었다.
'Windows > Windows API' 카테고리의 다른 글
디렉토리 생성 (하위 디렉토리 포함) CreateDirectory (Sub) (0) | 2013.10.01 |
---|---|
GDI+ 선의 끝모양 (0) | 2013.10.01 |
프로그램 실행 (CreateProcess) (0) | 2013.10.01 |
그림 인쇄(print) (0) | 2013.10.01 |
텍스트 인쇄 (print) (0) | 2013.10.01 |