Tistory View

Android Develop/Font

안드로이드 Antialiasing / SubPixel Rendering

God Dangchy What should I do? 2019. 9. 1. 12:29

Antialiasing

display는 격자로 만들어지기 때문에 아주 큰 글자로 출력할 때를 제외하고는 글자의 가장자리의 격자로인해 깨끗하게 보이지 않는다. aliasing의 뜻이 "찌글찌글"하다라는 뜻으로 말 그대로 이 찌글거림을 없애주는 기능이다. 글자의 가장자리부분에 Alpha(투명도)를 주어서 이 찌글거림을 완화 시켜 주는 것이다. 이는 서체뿐만 아니라 android.graphics.Path 등 모든 그리기 작업에 적용이 된다. 옛날 컴퓨터의 성능이 좋지 않은 시절과 해상도가 좋지 않았던 시절에는 이 기능은 상당한 부하가 되었지만, 지금은 좋은 성능덕분에 거의 켜놓고 시작을 한다.

 

 

코드는 다음과 같다.

Paint paint = new Paint( Paint.ANTI_ALIAS_FLAG );
// or
paint.setAntiAlias( true );

안드로이드는 이 코드로 간단히 해결이 된다.

 

 

SUBPIXEL RENDER

이는 모니터의 화소와 관련이 있다. 대부분의 모니터는 RGB순서로 하나의 픽셀을 구성한다. 하지만 그렇지 않는 모니터가 있는 데, BGR순서로 되어있는 모니터도 있다. 또한 RGB가 삼각형 형태로 배치된 경우도 있다. 글자를 화면에 찍으면 "난 검은색 글자를 찍었는 데, 붉은색이 보여~"하는 경우가 있는 데, 이 것이 픽셀의 순서 때문에 발생을 한다. 보통 쓰는 Windows의 경우 이 것을 cleartext라고 표현하는 데, 화면의 글자를 보며 가장 잘보이는 것을 선택하는 설정이 있다. 이 것이 글자의 픽셀을 이동시키거나 글자의 선두께를 변경하여 이런 현상을 최소화하는 기능이다. 스마트폰이나 테블릿의 경우 기기를 좌우회전을 하면 RGB가 BGR로 순서가 변하는 것이 되고 심지어 세우면 이 순서가 세로로 배치되게 된다. 이 모든 상황에서도 가장 깔끔히 글자를 보이게 하는 것이 이 SUBPIXEL TEXT기능이다.

 

 

기본적으로 이 값은 켜져있는 것으로 되어있다. 가끔씩 외부폰트를 이용할 경우 이 것이 꺼져 있는 경우가 있는 데, 이 때는 다음의 코드로 켜면된다.

paint.setSubpixelText( true );

 

이 것을 사용할 경우 특정글자가 위치가 안맞는 경우가 있는 데, 이 때는 LINEAR_TEXT_FLAG도 같이 켜거나 꺼주면 된다.

 

 

 

 

이 Subpixel기능은 주로 LCD화면에 그릴 때만 동작을 한다(주1). 이 말은 글자를 Bitmap에 그리고 이 것을 다시 화면에 그리면 그냥 Bitmap만을 그리기 때문에 가장 깔끔한 글자를 볼 수는 없다. 괜히 "왜 이럴까?"하는 고민에 빠지거나, 안되는 걸 되게 해보겠다고 시간을 허비하지 않길 바란다. 필자가 그랬다는 이야기는 절~~~~~~~~~~때 아니다. ㅠㅠ

 

 

 


주1) CRT화면의 경우 위치값이 사실상 존재하지 않기 때문에 이 기능이 동작하지 않는다. 아직 CRT쓰는 사람은 없는 것으로...

Replies
Reply Write