관리 메뉴

Kim's Programming

2차원 그래픽스 문자와 색상 표현 본문

Computer Theory/Computer Graphics

2차원 그래픽스 문자와 색상 표현

Programmer. 2016. 1. 23. 13:11

문자의 표현



폰트(Font)의 종









컴퓨터그래픽스에서 사용되고 있는 폰트에는 래스터 폰트(좌) 형식벡터 폰트(우) 형식이 있습니다.


래스터 폰트 (Raster Font 또는 Bitmap Font)는 좌측처럼 일일이 픽셀마다 처리를 해서 글자를 만드는 것입니다. 래스터 폰트 방식은 메모리 내에서 비트맵에 대한 연산으로 처리하므로 출력속도가 빠르고 글자의 설계과정은 이미지 편집과정과 비슷하여 제작도 간단하지만 확대 했을 때 계단현상(Aliasing)이 일어납니다. 또 회전, 밀림들의 기하변환이 매우 어렵습니다.


벡터 폰트(Vector Font 또는 Outline Font)는 오른쪽 처럼 글자의 윤곽선을 여러 부분으로 나누어 직선, 원호, 곡선 등으로 표현하고 이들의 제어점을 저장하여 글자를 표현합니다. 벡터 폰트는 확대 또는 축소를 하여도 출력 품질이 저하되지 않습니다(Aliansing 현상이 없습니다.) 또한 회전, 밀림 등의 기하변환이 용이 하지만 기하변환을 위한 계산 시간이 증가한다는 특징이 있습니다.


문자와 텍스트의 속성


문자의 주요속성으로는 폰트, 색상, 크기, 스타일 등이 있습니다. 크기 속성에서는 문자의 폭과 높이를 지정하며, 스타일은 bold체, 이탤릭체, 밑줄 등을 지정합니다. 텍스트(Text 또는 string)을 표현할 때의 속성인 방향에는 문자의 세우기 방향(Orintation)과 쓰기 방향(Direction)이 있습니다. 정렬(alignment) 속성에서는 왼쪽 오른쪽 양쪽 맞춤들이 있습니다.



안티앨리어싱(Anti-Aliasing)


앨리어싱이란 래스터 방식의 출력에서 해상도가 낮거나 확대하였을 때 발생하는 계단 형상입니다. 해결 방법으로는 해상도를 높히는 방법이 있으나 해상도를 높히는 것에는 한계가 존재합니다. 그러나 컬러 또는 회생조 출력 장치인 경우에는 픽셀의 깊이를 이용하여 앨리어싱 현상을 완화 시키는 안티앨리어싱 기법이 존재합니다. 안티앨리언싱은 다음과 같은 것을 의미합니다.


슈퍼샘플링(Super Sampling) 기법




앨리어싱을 제거할 때 가장 간단히 처리할 수 있는 방법은 단순히 nxn배로 해상도를 높여서 표현하는 방법이 있습니다. 원래 해상도에서 그려야 하는 픽셀의 명암값을 결정합니다. 원래 해상도에서 픽셀의 영역에 포함되는 고해상도 픽셀 중 그림에 포함된 작은 픽셀의 개수에 비례하여 명암 값을 계산합니다. 


영역 샘플링(Area Sampling) 기법


영역 샘플링 기법은 다각형의 경계선이 지나는 (테두리에 걸치는 픽셀)에 대해여 얼마나 다각형에 표현되냐를 계산하여  그 비율에 따라 명암을 결정하여 앨리언싱을 합니다. 위의 오른쪽 사진에서 양 끝의 y좌표는 다음과 같이 되게 됩니다.






가 되므로 사변형에 포함되는(오른쪽에서 칠래진) 부분의 면적을 구하게 되면 다음과 같이 구할 수 있습니다.

계산의 결과는 1과 0 사이 이므로 그 비율에 따라 색을 입혀주면 됩니다.




색상의 표현

 RGB 컬러 표현방식

 비트 수

 표현가능 색상 수

 비고

 1

 2^1=2

 흑백

 4

 2^4=16

 팔레트 사용

 8

 2^8=256

 팔레트 사용

 16

 2^16=65536

 하이컬러(R:G:B = 5:5:5)

 24

 2^24=16777216

 트루컬러(R:G:R = 8:8:8)

 32

 2^24=16777216 + 알파 채널 8비트

 트루컬러 + 알파 채널


RGB에서는 프레임 버퍼의 메로리의 크기에 따라서 표현할 수 있는 양이 정해집니다. 비트가 k가 사용될 때 2^k개의 색상을 이용할 수 있습니다. 이중 256색 이하의 색상을 이용할 때는 사용자가 필요한 색깔인 인덱스 컬러를 사용하게됩니다. 그리고 사람의 눈이 인지할 수 있는 색깔은 1600만개가 전부이기 때문에 24비트를 트루컬러라고 불리우며 32비트의 경우는 24비트 색상을 표현하되 나머지 8비트를 이용하여 투명도, 안개효과, 은면제거 등에 이용되는 알파채널로 표현하게 되며 RGB가 아닌 RGBA 컬러 표현방식이라고 부릅니다.


      • 프레임 버퍼 메모리 계산법

프레임 버퍼 메모리의 전체 크기는 색상수와 관계가 있습니다. 프레임버퍼로 필요한 메모리 크기는 픽셀 깊이 그리고 해상도에 비례하게됩니다. 1024x768해상도에서 32비트 를 표현하기 위해서는 1024*768*32비트 이므로 계산하면 약 3MB정도가 됩니다(1바이트는 8비트)
      • 프레임 버퍼에 따른 색상수 계산법

프레임 버퍼가 3메가일 경우에 1280x1024 해상도 모드에서 표현 할 수 있는 최대 색상깊이를 구해보면 3MB/1024/1280을 했을때 약 17비트가 나오게 됩니다.  따라서 16비트까지 이용할 수 있기 때문에 최대 하이 컬러로 이용할 수 있습니다.

 인덱스컬러(Indexed Color) 표현 방식





프레임버퍼가 많이 작을 때는 색상의 수가 제한될 때 인덱스 컬러방식으로 사용자가 원하는 색상을 이용하여 자연스럽게 표현할 수 있습니다. 만약 어떤 그림을 256개의 일반적인 색상을 이용하여 표현한다면 색상의 표현이 어색할 수 있습니다. 하지만 원래 사진과 가장 가까운 색 256개의 색깔을 모아서 표현하게 되면 원래의 그림에 훨씬 가까운 색상으로 더 자세하게 표현할 수 있습니다. 이렇게 원래 사진가 가까운 색들의 집합음 색상보기표(CLUT : Color Look Up Table)라고 합니다. 위의 그림에서는 16가지의 색상만으로 앵무새를 표현한 것입니다.