본문 바로가기

Windows/Windows API

GDI+ 안티 알라이싱

.안티 알리아싱

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