KR20070011664A - 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체 - Google Patents

스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체 Download PDF

Info

Publication number
KR20070011664A
KR20070011664A KR1020050066105A KR20050066105A KR20070011664A KR 20070011664 A KR20070011664 A KR 20070011664A KR 1020050066105 A KR1020050066105 A KR 1020050066105A KR 20050066105 A KR20050066105 A KR 20050066105A KR 20070011664 A KR20070011664 A KR 20070011664A
Authority
KR
South Korea
Prior art keywords
base
offset
bitmap image
hinting
outline
Prior art date
Application number
KR1020050066105A
Other languages
English (en)
Other versions
KR100691501B1 (ko
Inventor
김종현
Original Assignee
(주)정글시스템
한국문화콘텐츠진흥원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)정글시스템, 한국문화콘텐츠진흥원 filed Critical (주)정글시스템
Priority to KR1020050066105A priority Critical patent/KR100691501B1/ko
Publication of KR20070011664A publication Critical patent/KR20070011664A/ko
Application granted granted Critical
Publication of KR100691501B1 publication Critical patent/KR100691501B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformation in the plane of the image
    • G06T3/40Scaling the whole image or part thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration by the use of local operators
    • G06T5/30Erosion or dilatation, e.g. thinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/32Image data format

Abstract

본 발명은 외곽선 폰트를 비트맵 이미지로 변환하는 방법에 관한 것으로, 특히, 프린터, 출력기 등과 같은 고해상도 기기용으로 개발된 외곽선 폰트를 CRT, LCD등의 저해상도 디바이스에서 외곽선 폰트를 직접 랜더링(Rendering)하여도 저해상도 기기에서도 폰트의 품질을 유지할 수 있도록 획의 두께와 위치를 보다 정교하게 다룰 수 있는 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵 이미지 변환 방법 및 그 방법이 구현된 소프트웨어를 저장한 컴퓨터가 읽을 수 있는 기록매체에 관한 것이다.
비트맵 이미지를 이루는 각 격자를 통과하는 수평 또는 수직 스캔라인에 대응하여 글립의 폐곡선이 만나는 점들의 쌍을 (base, offset)라 할 때, 스냅 힌팅 은 base의 위치가 미리 정해진 기준 두께 position을 기준으로 미리 정해진 delta의 범위 내에 있는 경우, base의 변환값인 s(base)를 s(position)으로 결정하고, offset의 변환값인 s(offset)을 s(position)에 offset과 base의 차의 변환값인 s(thickness)를 더한 값으로 정정하는 것이고, 스템 힌팅은 이들의 차가 미리 정해진 기준 두께 depth를 기준으로 미리 정해진 delta의 범위 내에 있는 경우, offset의 변환값인 s(offset)을 base의 변환값인 s(base)에 depth의 변환값인 s(depth)를 더한 값으로 정정하는 것이다.

Description

스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵 이미지 변환 방법 및 그 방법이 구현된 소프트웨어를 저장한 컴퓨터가 읽을 수 있는 기록매체{Conversion method of outline font to bitmap image using snap hinting and stem hinting technic and computer readable media storing the software in which the conversion method is implemented}
도 1a는 가로 16픽셀, 세로 16픽셀의 폰트를 도시한 것이고, 도 1b는 도 1a의 폰트를 가로 8픽셀, 세로 8픽셀 공간으로 변환하여 앤티 앨리어싱 처리를 한 것이고,
도 2a는 힌팅을 적용하지 않고 외곽선 폰트를 22라인 크기의 비트맵 이미지로 변환한 결과로서, 자소의 두께(Weight)의 불일치 현상을 보여주는 도면이고,
도 2b는 힌팅을 적용하지 않고 외곽선 폰트를 26라인 크기의 비트맵 이미지로 변환한 결과로서, 문자의 크기(Size)을 확대하였을 경우 그 크기에 따른 두께(Weight)의 왜곡 현상을 보여주는 도면이고,
도 3a는 종래의 일반적인 힌팅을 적용하여 외곽선 폰트를 22라인 크기의 비트맵 이미지로 변환한 결과로서, 일정한 문자의 크기(Size)에서는 대체적으로 고른 두께(Weight)을 보유한 상태로 보여주는 도면이고,
도 3b는 종래의 일반적인 힌팅을 적용하여 외곽선 폰트를 26라인 크기의 비 트맵 이미지로 변환한 결과로서, 문자의 크기(Size)를 확대하였을 경우 그 크기에 따라 자소의 두께(Weight)를 보정하였으나 일정하게 보정해 주지 못한 상태를 보여주는 도면이고,
도 4는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵 이미지 변환 과정을 도시한 흐름도이고,
도 5a는 외곽선 폰트의 구성을 예시적으로 도시한 것이고,
도 5b는 도 5a의 외곽선 폰트를 16라인 크기의 비트맵 이미지로 변환하는 과정을 설명하기 위한 도면이고,
도 6a는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하여 외곽선 폰트를 22라인 크기의 비트맵 이미지로 변환한 결과를 도시한 것이고,
도 6b는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하여 외곽선 폰트를 26라인 크기의 비트맵 이미지로 변환한 결과를 도시한 것이고,
도 7a는 본 발명에 의한 스템 힌팅을 라틴 문자에 적용하여 외곽선 폰트를 16라인 크기의 비트맵 이미지로 변환하여 두께(depth)을 보정한 결과를 도시한 것이고,
도 7b는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 라틴 문자에 적용하여 외곽선 폰트를 16라인 크기의 비트맵 이미지로 변환한 결과를 도시한 것이고,
도 8a는 그레이 힌팅(Gray Hinting)을 적용한 한글 "그날" 문자에 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하기 전의 문자와 적용한 후의 문자 품질(Quality)을 비교한 것이고,
도 8b는 그레이 힌팅(Gray Hinting)을 적용한 한글 "도듣" 문자에 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하기 전의 문자와 적용한 후의 문자 품질(Quality)을 비교한 것이다.
본 발명은 외곽선 폰트를 비트맵 이미지로 변환하는 방법에 관한 것으로, 특히 레이저 프린터, 출력기(Image-Setter) 등과 같은 고해상도 기기용으로 개발된 외곽선 폰트를 CRT(cathode ray tube) 디스플레이, LCD(liquid crystal display) 등의 저해상도 디바이스에서의 비트맵 이미지로 변환할 때 저해상도 기기에서도 폰트 품질(가독성)을 높이기 위해 힌팅 기술을 사용한 외곽선 폰트의 비트맵 이미지 변환 방법에 관한 것이다.
외곽선 글꼴은 기본적으로 프린터와 같이 해상도가 높은(적어도 300 dpi에서 많게는 수천 또는 수만 dpi 까지) 출력 대상을 위한 글꼴이다. 이와 같은 외곽선 글꼴을 해상도가 72 dpi ~ 96 dpi 정도인 화면 장치에서는 외곽선 글꼴을 비트맵 방식으로 변환하는 과정에서 다음과 같은 문제점을 안게 된다.
첫째, 계단 현상이다.
화면 장치는 프린터 장치들보다 한 점이 큰 크기를 가지게 되며, 그에 따라서 곡선 부분에서는 선이 매끄럽지 못하고 마치 계단처럼 울퉁불퉁한 모습을 가지는 경우가 많은데, 이것을 흔이 계단 현상이라 한다.
화면 해상도를 72 dpi로 가정했을 때, 본문 글자의 크기로 널리 쓰이는 10포인트 글자는 화면에서 (10픽셀 * 10픽셀) 크기를 차지하게 된다. 따라서, 한 점이 글자 크기의 10%나 되므로, 곡선 부분에서 이러한 계단 현상이 쉽게 눈에 뜨인다. 물론 글자의 크기를 충분히 크게 한다면, 이러한 계단 현상이 눈에 잘 뜨이지는 않을 것이다. 하지만, 글자의 크기를 무작정 크게 하는 것은 한 화면에 보여줄 수 있는 글자 수를 적게 할 뿐만 아니라, 제목이 아닌 본문 크기를 지나치게 크게 하면 가독성을 떨어뜨리는 문제점을 가지고 있다.
둘째, 반올림 오차이다.
화면이나 프린터처럼 지정된 좌표에 점을 찍는 방식을 가진 출력 장치(이것을 래스터 장치(raster device)라고 한다)가 가지고 있는 문제 가운데 하나는 좌표값으로 소숫값을 가질 수 없다는 것이다. 즉, 좌표(0.05, 0.03)과 같은 것은 존재하지 않으며, 좌표(0, 0) 바로 오른쪽에 있는 점은 좌표(1, 0)이 된다. 프린터와 같은 경우에는 한 글자를 찍는데 필요한 좌표값이 충분히 크기 때문에 외곽선 모양을 따라서 점을 찍어갈 때 큰 문제를 갖지 않는다. 하지만, 해상도가 낮은 장치에서는 심각한 문제를 가질 수 있다. 예를 들어, 72 dpi 화면 장치에 10 포인트로 글자를 표시해야 할 경우에 좌표값은 (0, 0)에서 (9, 9)까지를 가질 수 있다. 이 안에 있는 100개의 점들을 가지고 글자를 표시해야 한다는 의미이다. 이럴 경우에 한글 '를'과 같은 문자에서는 문제가 생긴다. 이 문자를 표시하기 위해서는 세로 좌표값이 12까지 필요한데, 결국 10포인트로는 이 글자를 표시할 수 없는 문제점을 낳게 된다. 그리고, 또 다른 문제는 어떠한 글자가 10포인트에서 표시될 때, 가로 획 하나가 0.5포인트 두께를 갖는다고 가정해 볼 때 이 획을 화면상에서 어떻게 처리하여야 할 지에 관한 것이다. 소수점을 올려서 1픽셀, 곧 1포인트 두께가 되게 하거나, 소수점을 내려서 0픽셀, 곧 화면에 표시되지 않게 하는 것의 2가지 선택이 존재한다. 전자를 선택한다면 두께가 2배가 되기 때문에 모양이 나빠지거나 인접한 다른 획과 붙어 문자간의 간격이 없어질 수 있으며, 후자를 선택한다면 획이 사라지는 결과를 낳게 된다.
화면에서 한 점에 여러 가지 색깔을 나타낼 수 있다는 점에 착안하여 낮은 해상도를 향상시키는 효과를 얻는 방법으로, 이전까지는 글꼴을 화면에 표시할 때 어떠한 좌표에 점을 찍을 것인가 말 것인자를 선택하는 데에 그쳤던 것과는 달리, 어떤 색깔로 찍을 것인가를 선택하는 방법이 사용되고 있다. 이를 앤티-앨리어싱(Anti-Aliasing) 방식이라 한다.
예를 들어, 72 dpi 해상도인 화면에서 10 포인트로 글자를 표시하려면, 가로 10픽셀과 세로 10픽셀로 이루어지는 2차원 공간 안에 필요한 점을 찍어야 한다. 만약에 해상도가 144 dpi, 곧 72 dpi의 두배라면 공간은 가로 20픽셀, 세로 20픽셀로 늘어나게 되고, 좀 더 수월하게 글자를 표시할 수 있을 것이다. 앤티-앨리어싱의 원리는 좀 더 여유있는 공간에서 글자를 찍은 다음 이것을 필요한 만큼 축소하는 과정에서 없어지는 픽셀들을 그냥 없애지 않고 색깔 값으로 보정하는 것이다.
도 1a 및 도 1b를 살펴 보면, 도 1a에 표시된 공간에서의 한 점의 크기가 도 1b에 표시된 공간에서의 한 점의 크기보다 가로 1/2, 세로 1/2 작다. 따라서, 도 1a에 표시된 공간에서는 1b에 표시된 공간에 비하여 똑 같은 면적에 대해서 점을 4 배 더 갖게 된다. 도 1a에 표시된 공간에 점을 찍은 다음에 1b에 표시된 공간에 올려놓게 위해서는 가로와 세로를 각각 1/2로 축소해야 하며, 점의 숫자가 1/4로 줄어들게 된다. 이때, 가로 2픽셀과 세로 2픽셀씩을 묶게 되면 점 4개가 한 블록을 이룰 수 있으며, 이 블록은 다음과 같은 5가지 상태를 갖게 된다.
① 모두 칠해지지 않음(0%)
② 점 1개가 칠해짐(25%)
③ 점 2개가 칠해짐(50%)
④ 점 3개가 칠해짐(75%)
⑤ 점 4개가 칠해짐(100%)
따라서, 공간을 축소시킬 때 블록 단위로 점을 대응시키면서 단순히 점이 칠할 지 말 지를 결정하는 것이 아니라, 대응하는 블록이 칠해진 정도에 따라서 색깔을 달리하여 이 점을 칠한다면 좀 더 모양을 정확하게 만들 수 있을 것이다. 위에서 설명한 다섯 가지 경우에는 각각 흰색, 25% 회색, 50% 회색, 75% 회색, 검은색으로 대응시킬 수 있다. 또한 블록의 상태가 가질 수 있는 값을 더 많이 한다면, 더욱 정확한 모양을 만들어 낼 수 있을 것이다. 앤티-앨리어싱은 이러한 방법으로 외곽선 글꼴을 래스터 장치에 표시할 때 나타날 수밖에 없는 반올림 문제로 인하여 떨어져 나가는 점을 표시해 줄 수 있는 방법을 마련해 준다.
이와 같은 앤티-앨리어싱은 다음과 같은 문제점을 안고 있다. 앤티-앨리어싱에 의하더라도 1.5픽셀 두께의 획을 만들 수는 없다. 1.5픽셀 두께의 획을 그려야 할 경우, 앤티-앨리어싱은 1픽셀 부분은 그대로 화면에 검게 그리고, 나머지 0.5 픽셀 부분은 화면에서 회색조를 50% 준 1픽셀을 그리게 된다. 이렇게 하면, 분명히 2픽셀보다는 얇은 느낌을 주지만, 여전히 화면에서는 2픽셀을 차지하게 되고, 글꼴이 전체적으로 조금 두툼해지는 결과를 가져온다. 따라서, 획이 또렷하지 못하고 뿌옇게 보이는 문제점이 있다. 특히, 획이 얇은 2바이트 문자권에서는 글자 전체가 뿌옇게 흐려지면서 가독성을 오히려 떨어뜨리는 결과를 낳기도 한다.
힌팅 기법은 글자에 대하여 몇 가지 명령이나 정보를 덧붙여 특정한 크기나 모양에 대하여 변화를 줄 수 있도록 하여 크기가 작은 글자들을 해상도가 낮은 디바이스에서 표시할 때, 또는 특정한 상황에 맞게 모양을 교정하여 줌으로써 일부 가독성의 문제점을 극복하고자 하는 기법이다.
그러나 종래의 힌팅 기법은 특정상황에만 한정하여 적용되어 저해상도의 글꼴 가독성을 증진하는 데는 완전한 해결책이 되지 못하였다. 특히, 극동권 문자(2바이트의 한글, 한자, 일본어)에 대해서도 알파벳 문자 만큼이나 가독성 향상의 효과를 기대하기 힘들었다. 또 다른 부작용은 힌팅을 주게 될 경우에 자칫 똑같은 글꼴이 크기에 따라서 다른 모양으로 보이는 경우도 생긴다는 점이다.
도 2a 및 도 2b는 힌팅을 적용하지 않은 결과로 가로획과 세로획의 두께가 일정하지 않아 매우 조잡해 보인다.
이에 비하여, 도 3a 및 도 3b는 종래의 기술에 의한 힌팅 기술을 적용한 결과인데, 대부분의 크기에서는 가로획과 세로획의 두께가 일정하게 되어 품질이 비교적 높아졌지만,
(문제점 1) '근'자와 '응'자의 높이가 같지 않아 눈에 거슬릴 수 있고,
(문제점 2) 특정한 크기에서는 도 도 3b와 같이 여전히 획들의 두께가 보정되지 않아 조잡해 보인다
는 문제점들이 있다.
본 발명은 상기의 문제점들을 해결하기 위하여 창안된 것으로서, 프린터, 출력기 등과 같은 고해상도 기기용으로 개발된 외곽선 폰트를 CRT, LCD등의 저해상도 디바이스에서 외곽선 폰트를 직접 랜더링(Rendering)하여도 저해상도 기기에서도 폰트의 품질을 유지할 수 있도록 획의 두께와 위치를 보다 정교하게 다룰 수 있는 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵 이미지 변환 방법 및 그 방법이 구현된 소프트웨어를 저장한 컴퓨터가 읽을 수 있는 기록매체를 제공함을 그 목적으로 한다.
상기의 목적을 달성하기 위하여, 컴퓨터 시스템에 의해 수행되는 소프트웨어 모듈에 의해 수행되는 본 발명에 의한 외곽선 폰트의 비트맵 이미지 변환 방법은 (a) 외곽선 폰트에서 외곽선을 이루고 있는 모든 점들의 좌표들을 만들어야 할 비트맵 이미지의 크기로 확대하거나 축소하는 외곽선 변환단계; (b) 비트맵 이미지의 품질을 높이기 위해서 획의 두께나 위치를 보정하는 힌팅 단계; 및 (c) 외곽선의 내부를 비트맵으로 채우는 스캔 컨버젼 단계;를 포함하되, 상기 힌팅 단계는, (b1) 비트맵 이미지를 이루는 각 격자를 통과하는 수평 또는 수직 스캔라인에 대응하여 글립의 폐곡선이 만나는 점들의 쌍을 (base, offset)라 할 때, base의 위치가 미리 정해진 기준 두께 position을 기준으로 미리 정해진 delta의 범위 내에 있는 경우, base의 변환값인 s(base)를 s(position)으로 결정하고, offset의 변환값인 s(offset)을 s(position)에 offset과 base의 차의 변환값인 s(thickness)를 더한 값으로 정정하는 스냅 힌팅 단계; 를 구비한다.
상기의 목적을 달성하기 위하여, 컴퓨터 시스템에 의해 수행되는 소프트웨어 모듈에 의해 수행되는 본 발명에 의한 외곽선 폰트의 비트맵 이미지 변환 방법은 (a) 외곽선 폰트에서 외곽선을 이루고 있는 모든 점들의 좌표들을 만들어야 할 비트맵 이미지의 크기로 확대하거나 축소하는 외곽선 변환단계; (b) 비트맵 이미지의 품질을 높이기 위해서 획의 두께나 위치를 보정하는 힌팅 단계; 및 (c) 외곽선의 내부를 비트맵으로 채우는 스캔 컨버젼 단계;를 포함하되, 상기 힌팅 단계는, (b2) 비트맵 이미지를 이루는 각 격자를 통과하는 수평 또는 수직 스캔라인에 대응하여 글립의 폐곡선이 만나는 점들의 쌍을 (base, offset)라 할 때, 이들의 차가 미리 정해진 기준 두께 depth를 기준으로 미리 정해진 delta의 범위 내에 있는 경우, offset의 변환값인 s(offset)을 base의 변환값인 s(base)에 depth의 변환값인 s(depth)를 더한 값으로 정정하는 스템 힌팅 단계;를 구비한다.
이하에서, 본 발명에 따른 외곽선 폰트의 비트맵 이미지 변환 방법에 대한 바람직한 실시예들을 첨부된 도면에 의거하여 상세하게 설명하기로 한다.
도 4에 의하면, 본 발명에 의한 외곽선 폰트의 비트맵 이미지 변환 과정은 크게 그리드 피팅(Grid Fitting)과 스캔 컨버전(Scan Conversion)의 두 단계로 수행되고, 그리드 피팅은 다시 외곽선 변환과 힌팅의 두 단계로 수행된다.
외곽선 변환 단계(S10)는 외곽선을 이루고 있는 모든 점의 좌표들을 만들어야 할 비트맵 이미지의 크기로 확대하거나 축소하는 단계이다.
힌팅 단계(S20)는 비트맵 이미지의 품질을 높이기 위해서 획의 두께나 위치 등을 보정하는 단계이며, 스캔 컨버전 단계(S30)는 그리드 피팅된 외곽선의 내부를 비트맵으로 채우는 단계이다.
외곽선 폰트(Outline Font)의 각 글립은 도 5a와 같이 폐곡선으로 구성되어 있고, 16 크기의 비트맵 이미지(Bitmap Image)로 변환하려면 ① 가로, 세로 각각 16개의 격자로 나눈 뒤, ② 세로 격자들 각각의 중심을 지나는 수평선인 ScanLine을 그리고, ③ ScanLine이 좌측 및 우측에서 만나는 점들의 쌍 사이를 비트맵으로 채운다. 결국 수평선 상의 두 점 사이를 채우는 것이다.
다시 말하면, 외곽선 폰트를 비트맵 이미지로 바꾸는 과정의 최소 작업 단위는 결국 수평선 상의 두 점을 만들려고 하는 비트맵 이미지의 크기로 확대/축소한 다음 그 사이의 정수를 추출하는 것이다. 이하의 과정에서는 수평선인 ScanLine만을 고려하고 있지만, 수직선인 ScanLine에 대해서도 동일한 과정이 진행됨으로써 본 발명에 의한 힌팅 과정이 완성된다.
아웃라인 폰트의 기본 단위의 크기를 em,
만들어야 할 비트맵 이미지의 크기를 size,
수평선 상의 두 점을 각각 base, offset(편의상 base <= offset),
추출된 정수의 집합을 PIXELS(em, size, base, offset)이라 하자.
모든 실수 x는 다음과 같이 표현할 수 있고,
x = i + f (i는 정수, 0.0 <= f < 1.0)
INT(x)와 FRA(x)를 다음과 같이 정의한다.
INT(x) = i
FRA(x) = f
또한 다음과 같이 여러 가지 함수를 정의하자.
SIGN(x) = 1 (x >= 0)
-1 (x < 0)
ABS(x) = x (x >= 0)
-x (x < 0)
SCALE(em, size, x) = x * size / em
DIST(base, offset) = offset - base
ROUND_DOWN(x) = INT(x)
ROUND_UP(x) = INT(x)+1
ROUND(x) = ROUND_DOWN (x) (FRA(x) < 0.5)
ROUND_UP (x) (FRA(x) >= 0.5)
먼저, 힌팅(Hinting)이 없을 경우의 PIXELS(em, size, base, offset)은 다음과 같이 표현된다.
PIXELS_NO_HINT(em, base, offset) =
1) FRA(SCALE(em, size, base)) <= 0.5 이면
INT(SCALE(em, size, base))
2) ROUND_UP(SCALE(em, size, base))와
ROUND_DOWN(SCALE(em, size, offset))-1 사이의 모든 정수
3) FRA(SCALE(em, size, offset)) >= 0.5 이면
INT(SCALE(em, size, offset))
일반적인 힌팅 기술이 적용된 경우의 PIXELS(em, size, base, offset)은 다음과 같이 표현된다.
new_base = INT(SCALE(em, size, base))
dist = INT(SCALE(em, size, DIST(base, offset)))
new_offset = new_base + dist 이라 할 때,
PIXELS_GENERAL_HINT(em, base, offset) =
new_base와 new_offset 사이의 모든 정수
본 발명에서는 힌팅 단계(Snap Hinting)(S20)에서 스냅 힌팅 단계(S210)와 스탬 힌팅 단계(Stem Hinting)(S220)를 구비한다.
스템 힌팅(S220)은 힌트는 두께가 다른 여러 구간들(도 5b에서 비트맵으로 채우는 구간)에서, 그 두께가 depth를 기준으로 ㅁdelta의 범위 내에 있으면 depth 라는 두께로 통일한다는 것을 의미한다. 예를 들어, depth = 3, delta = 0.5이면, 2.5보다 크고 3.5보다 작은 두께는 3으로 하겠다는 것이다.
도 5b에서 ScanLine상에서 좌측 구간과 우측 구간을 각각 2와 4.8에서 만나면, 두께가 2.8이므로 두께를 3으로 바꾼 좌표 2와 5사이를 채우는 것이다. 이때, depth와 delta의 값들은 일정하게 정해진 것이 아니고, 글자에 따라 디자이너가 최적치를 적용할 수 있다.
따라서, 스템 힌팅(S220)은 PIXELS_GENERAL_HINT(em, base, offset)의 입력 정보 외에 depth, delta의 두 가지 정보가 추가된다. 여기서, depth는 스템의 기준 두께이고, delta는 두께를 보정할 오차의 범위이다. PIXELS_STEM_HINT(em, base, offset, depth, delta)은 다음과 같이 정의된다.
new_base = INT(SCALE(em, size, base))
ogn_dist = SCALE(em, size, DIST(base, offset))
scaled_depth = SCALE(em, size, depth)
scaled_delta = SCALE(em, size, delta)
error = ABS(ogn_dist - scaled_depth)
sign = SIGN(ogn_dist)
dist = INT(sacled_depth)*sign (error <= scaled_delta)
ogn_dist (error > scaled_delta)
new_offset = new_base + dist
이라 할 때,
PIXELS_STEM_HINT(em, base, offset, depth, delta) =
new_base와 new_offset 사이의 모든 정수
이를 슈도 코드 형태로 표현하면 다음과 같다.
먼저, 임의의 글자를 구성하는 점들의 수를 n이라 하고 각 점들의 원래 좌표들을 p1, p2, p3, ..., pn이라 하고, 외곽선 변환된 점들을 s(p1), s(p2), s(p3), ...., s(pn)이라 하면, 모든 i(1 <= i <= n)에 다음과 같은 수식이 성립한다.
s(pi) = pi * size / em
thickness = offset - base;
s(thickness) = (offset - base) * size / em;
s(depth) = depth * size / em;
s(base) = base * size / em;
error = absolute(thickness - depth);
s(error) = absolute(s(thickness) - s(depth));
만약 s(error)가 delta보다 작으면,
s(offset) = s(base) + s(depth);
그렇지 않으면
s(offset) = s(base) + s(thickness);
모든 i에 대하여 (1 <= i <= n)
pi가 base와 같은 경우에 한하여,
s(pi) = s(base);
pi가 offset과 같은 경우에 한하여,
s(pi) = s(offset);
한편, 스냅 힌팅(S210)은 위치를 통일시키기 위한 것이다. 예를 들어, 도 5b의 글립에서 네모와 원의 최상단 및 하단의 y좌표가 틀린데 경우에 따라서 같게 처리해야할 경우가 있다. 즉, 어떤 좌표가 (position-delta)보다 크고 (position+delta)보다 작으면 (position)이란 값을 사용하겠다는 의미이다. 여기에서도, position과 delta의 값들은 일정하게 정해진 것이 아니고, 글자에 따라 디자이너가 최적치를 적용할 수 있다.
따라서, 스냅 힌팅(S210)은 PIXELS_GENERAL_HINT(em, base, offset)의 입력 정보 외에 position, delta의 두 가지 정보가 추가된다. 여기서 position은 기준 위치이고, delta는 위치를 보정할 오차의 범위이다. PIXELS_SNAP_HINT(em, base, offset, position, delta)은 다음과 같이 정의된다.
ogn_base = INT(SCALE(em, size, base))
scaled_ position = SCALE(em, size, position)
scaled_delta = SCALE(em, size, delta)
error = ABS(ogn_base scaled_ position)
new_base = INT(sacled_ position) (error <= scaled_delta)
ogn_base (error > scaled_delta)
dist = INT(SCALE(em, size, DIST(base, offset)))
new_offset = new_base + dist
이라 할 때,
PIXELS_ SNAP_HINT(em, base, offset, position, delta) =
new_base와 new_offset 사이의 모든 정수
이를 슈도 코드 형태로 표현하면 다음과 같다.
thickness = offset - base;
s(thickness) = (offset - base) * size / em;
s(position) = position * size / em;
s(base) = base * size / em;
s(offset) = s(base) + s(thickness);
모든 i에 대하여 (1 <= i <= n)
pi가 base와 같은 경우에 한하여
error = absolute(pi - position);
s(error) = absolute(s(pi) - s(position));
만약 s(error)가 delta보다 작으면
s(pi) = s(position);
그렇지 않으면
s(pi) = s(base);
pi가 offset과 같은 경우에 한하여,
s(pi) = s(offset);
도 6a는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하여 외곽선 폰트를 22라인 크기의 비트맵 이미지로 변환한 결과를 도시한 것이고, 도 6b는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하여 외곽선 폰트를 26라인 크기의 비트맵 이미지로 변환한 결과를 도시한 것이다.
도 7a는 본 발명에 의한 스템 힌팅을 라틴 문자에 적용하여 외곽선 폰트를 16라인 크기의 비트맵 이미지로 변환하여 두께(depth)을 보정한 결과를 도시한 것이고, 도 7b는 본 발명에 의한 스냅 힌팅과 스템 힌팅을 라틴 문자에 적용하여 외곽선 폰트를 16라인 크기의 비트맵 이미지로 변환한 결과를 도시한 것이다.
도 8a는 그레이 힌팅(Gray Hinting)을 적용한 한글 "그날" 문자에 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하기 전의 문자와 적용한 후의 문자 품질(Quality)을 비교한 것이고, 도 8b는 그레이 힌팅(Gray Hinting)을 적용한 한글 "도듣" 문자에 본 발명에 의한 스냅 힌팅과 스템 힌팅을 적용하기 전의 문자와 적용한 후의 문자 품질(Quality)을 비교한 것이다.
한편, 상술한 본 발명의 실시예는 개인용 컴퓨터를 포함한 범용 컴퓨터에서 사용되는 매체에 기록될 수 있다. 상기 매체는 마그네틱 기록매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독매체(예를 들면, 씨디롬, 디브이디 등), 전기적 기록매체(예를 들면, 플레쉬 메모리, 메모리 스틱 등) 및 캐리어 웨이브(예를 들면, 인터넷을 통한 전송)와 같은 기록매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
본 발명을 새로 개발되는 저해상도용 폰트에 적용하여 품질을 더욱 더 높일 수도 있지만, 이미 개발된 고해상도용 폰트에 간단히 본 발명을 적용하여도 디자인 수정 없이 저해상도에서 사용할 수 있다.

Claims (3)

  1. 컴퓨터 시스템에 의해 수행되는 소프트웨어 모듈에 의해 수행되는 외곽선 폰트의 비트맵 이미지 변환 방법에 있어서,
    (a) 외곽선 폰트에서 외곽선을 이루고 있는 모든 점들의 좌표들을 만들어야 할 비트맵 이미지의 크기로 확대하거나 축소하는 외곽선 변환단계;
    (b) 비트맵 이미지의 품질을 높이기 위해서 획의 두께나 위치를 보정하는 힌팅 단계; 및
    (c) 외곽선의 내부를 비트맵으로 채우는 스캔 컨버젼 단계;를 포함하되,
    상기 힌팅 단계는,
    (b1) 비트맵 이미지를 이루는 각 격자를 통과하는 수평 또는 수직 스캔라인에 대응하여 글립의 폐곡선이 만나는 점들의 쌍을 (base, offset)라 할 때, base의 위치가 미리 정해진 기준 두께 position을 기준으로 미리 정해진 delta의 범위 내에 있는 경우, base의 변환값인 s(base)를 s(position)으로 결정하고, offset의 변환값인 s(offset)을 s(position)에 offset과 base의 차의 변환값인 s(thickness)를 더한 값으로 정정하는 스냅 힌팅 단계; 를 구비함을 특징으로 하는 외곽선 폰트의 비트맵 이미지 변환 방법.
  2. 컴퓨터 시스템에 의해 수행되는 소프트웨어 모듈에 의해 수행되는 외곽선 폰트의 비트맵 이미지 변환 방법에 있어서,
    (a) 외곽선 폰트에서 외곽선을 이루고 있는 모든 점들의 좌표들을 만들어야 할 비트맵 이미지의 크기로 확대하거나 축소하는 외곽선 변환단계;
    (b) 비트맵 이미지의 품질을 높이기 위해서 획의 두께나 위치를 보정하는 힌팅 단계; 및
    (c) 외곽선의 내부를 비트맵으로 채우는 스캔 컨버젼 단계;를 포함하되,
    상기 힌팅 단계는,
    (b2) 비트맵 이미지를 이루는 각 격자를 통과하는 수평 또는 수직 스캔라인에 대응하여 글립의 폐곡선이 만나는 점들의 쌍을 (base, offset)라 할 때, 이들의 차가 미리 정해진 기준 두께 depth를 기준으로 미리 정해진 delta의 범위 내에 있는 경우, offset의 변환값인 s(offset)을 base의 변환값인 s(base)에 depth의 변환값인 s(depth)를 더한 값으로 정정하는 스템 힌팅 단계;를 구비함을 특징으로 하는 외곽선 폰트의 비트맵 이미지 변환 방법.
  3. 청구항 제1항 또는 제2항에 의한 외곽선 폰트의 비트맵 이미지 변환 방법이 구현된 소프트웨어를 저장한 컴퓨터가 읽을 수 있는 기록매체.
KR1020050066105A 2005-07-21 2005-07-21 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체 KR100691501B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020050066105A KR100691501B1 (ko) 2005-07-21 2005-07-21 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050066105A KR100691501B1 (ko) 2005-07-21 2005-07-21 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체

Publications (2)

Publication Number Publication Date
KR20070011664A true KR20070011664A (ko) 2007-01-25
KR100691501B1 KR100691501B1 (ko) 2007-03-09

Family

ID=38012268

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050066105A KR100691501B1 (ko) 2005-07-21 2005-07-21 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체

Country Status (1)

Country Link
KR (1) KR100691501B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100923572B1 (ko) * 2007-06-19 2009-10-27 장주식 폰트 작성 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06274151A (ja) * 1993-01-22 1994-09-30 Ricoh Co Ltd ヒンティング処理方法
JPH09134157A (ja) * 1995-11-09 1997-05-20 Fujitsu Ltd ヒント付け方法及びフォントファイル構成方法
US6597360B1 (en) * 1998-10-07 2003-07-22 Microsoft Corporation Automatic optimization of the position of stems of text characters

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100923572B1 (ko) * 2007-06-19 2009-10-27 장주식 폰트 작성 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체

Also Published As

Publication number Publication date
KR100691501B1 (ko) 2007-03-09

Similar Documents

Publication Publication Date Title
JP4358472B2 (ja) イメージデータの非対称スーパーサンプリングラスタ化のための方法およびシステム
JP3072250B2 (ja) グリッド・フィッティド・フォントのグレイスケール処理を用いたフォント・レンダリング方法
US7408555B2 (en) Adjusted Stroke Rendering
US6393145B2 (en) Methods apparatus and data structures for enhancing the resolution of images to be rendered on patterned display devices
US6282327B1 (en) Maintaining advance widths of existing characters that have been resolution enhanced
US5929866A (en) Adjusting contrast in anti-aliasing
US7719536B2 (en) Glyph adjustment in high resolution raster while rendering
US5719595A (en) Method and apparauts for generating a text image on a display with anti-aliasing effect
US6101514A (en) Anti-aliasing apparatus and method with automatic snap fit of horizontal and vertical edges to target grid
US7580039B2 (en) Glyph outline adjustment while rendering
JPS62123573A (ja) コンピユ−タ・グラフイツク装置およびその操作方法
WO2005098757A2 (en) Edge detection based stroke adjustment
JPH08106276A (ja) スクリーン上でのテキスト表示方法
JP2006171675A (ja) シルエット化グレーフォント発生方法
JPH06208370A (ja) エイリアシング阻止および格子適合を結合した文字表示ラスタ化方法
US7006107B2 (en) Anisotropic anti-aliasing
KR100691501B1 (ko) 스냅 힌팅과 스템 힌팅을 사용한 외곽선 폰트의 비트맵이미지 변환 방법 및 그 방법이 구현된 소프트웨어를저장한 컴퓨터가 읽을 수 있는 기록매체
KR20060030887A (ko) 문자 표시 장치, 문자 표시 방법, 문자 표시 프로그램 및 가독 기록 매체
JPH02275494A (ja) 文字パターンデータ発生方法
JP3408176B2 (ja) フォント処理装置、フォント処理方法及び記憶媒体
JP4505082B2 (ja) 多階調データ生成装置、プログラム記憶媒体、データ記憶媒体
JP3357855B2 (ja) フォント処理装置、フォント処理方法及び記憶媒体
TWI409800B (zh) 根據筆劃基礎字型資料產生低解像度中文小字品質顯示的方法和裝置
JPH0876739A (ja) ビットマップフォントの縮小画面表示方法および縮小画面表示装置
JPH05181451A (ja) 文字表示装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130218

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20131209

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150130

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20160111

Year of fee payment: 10