JP3791259B2 - アウトラインスムージング処理方法 - Google Patents

アウトラインスムージング処理方法 Download PDF

Info

Publication number
JP3791259B2
JP3791259B2 JP28721899A JP28721899A JP3791259B2 JP 3791259 B2 JP3791259 B2 JP 3791259B2 JP 28721899 A JP28721899 A JP 28721899A JP 28721899 A JP28721899 A JP 28721899A JP 3791259 B2 JP3791259 B2 JP 3791259B2
Authority
JP
Japan
Prior art keywords
vector
dot
line
coordinates
vectorized
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
JP28721899A
Other languages
English (en)
Other versions
JP2001109455A5 (ja
JP2001109455A (ja
Inventor
重一 柳澤
隆二 大本
徳章 宮坂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
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 Seiko Epson Corp filed Critical Seiko Epson Corp
Priority to JP28721899A priority Critical patent/JP3791259B2/ja
Priority to TW089120929A priority patent/TW509888B/zh
Priority to US09/684,799 priority patent/US6753862B1/en
Priority to CNB001355392A priority patent/CN1160667C/zh
Priority to KR10-2000-0059074A priority patent/KR100376196B1/ko
Publication of JP2001109455A publication Critical patent/JP2001109455A/ja
Priority to HK01107668A priority patent/HK1036865A1/xx
Publication of JP2001109455A5 publication Critical patent/JP2001109455A5/ja
Application granted granted Critical
Publication of JP3791259B2 publication Critical patent/JP3791259B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41JTYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
    • B41J5/00Devices or arrangements for controlling character selection
    • B41J5/30Character or syllable selection controlled by recorded information
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/103Formatting, i.e. changing of presentation of documents
    • G06F40/109Font handling; Temporal or kinetic typography
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/22Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of characters or indicia using display control signals derived from coded signals representing the characters or indicia, e.g. with a character-code memory
    • G09G5/24Generation of individual character patterns
    • G09G5/28Generation of individual character patterns for enhancement of character form, e.g. smoothing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Computer Hardware Design (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Dot-Matrix Printers And Others (AREA)
  • Image Processing (AREA)
  • Editing Of Facsimile Originals (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、テープ印刷装置、ワープロやパソコンにおける印刷装置または表示装置等、ビットマップフォントを持つ文字出力装置に用いて好適な、アウトラインスムージング処理方法に関する。
【0002】
【従来の技術】
従来、様々なサイズの文字を印刷あるいは表示する方法に、
(1) 対象となる文字データを全て持つ方法、
(2) ビットマップフォントを持ち、拡大縮小する方法、
(3) アウトラインフォントを持ち、拡大縮小する方法、
があった。
【0003】
【発明が解決しようとする課題】
しかしながら(1)については、データ量が膨大となり現実的でない。(2)については、(1)に比べて印刷品質が劣り、その欠点を解消しようとした場合にはソフトウェアにかかる負担が大きくなってその処理に時間を要す。
【0004】
具体的に、ビットマップフォントを持つ印刷装置において、印字品質向上のための処理として、文字の拡大時における「段差」の平滑化処理がある。ここで、「段差」とは、ビットマップフォントの斜め方向において隣接するドット配列が不連続となり、文字の拡大に伴ってくずれが生じる部分である。
従来は平滑化のためにこの「段差」を検出し、拡大時にその「段差」を埋めるように補正ドットを追加していた。
【0005】
ところが、この平滑化処理において、補正ドットを多くすると文字の輪郭がくずれてデザインが損なわれ、また、補正ドットの数を少なくすれば凹凸が残り、拡大率が大きくなるほど補正のための効果がさほど得られないという欠点があった。
【0006】
一方、(3)については、(2)に比べてシステム規模が大きくなり、また、データ量も大となり、たとえばテープ印刷装置のような比較的規模の小さい印刷装置においては、処理時間、価格のいずれかを犠牲にしていたものである。
【0007】
本発明は上述した諸々の欠点を解消するためになされたものであり、ビットマップフォントを持つ印字、表示等のための文字出力装置において、ビットマップフォントを一旦ベクトルデータに置換し、ベクトルデータ上での平滑化により、拡大率が大きくなっても滑らかなフォントを再現できるアウトラインスムージング処理方法ならびに装置を提供することを目的とする。
【0008】
【課題を解決するための手段】
本発明のアウトラインスムージング処理方法は、文字フォントをドットマトリクス状のビットマップデータとして持ち、その文字フォントを印刷もしくは表示する文字出力装置で実行されるアウトラインスムージング処理方法において、前記ビットマップデータに対し、あらかじめ規定された条件に従いベクトルの始点となる座標を求める始点検索のための処理工程と、前記始点から順にドットの変化方向を調べ、上下左右4方向の直交ベクトル行列に変換すると共に、そのドットがベクトル化済みであることを示すベクトル化済み情報を更新する直交ベクトルへの変換のための処理工程と、前記変換された直交ベクトル行列の連続する複数のベクトルの変化量から、あらかじめ斜線化すべきパターンが定義される斜線化テーブルを参照して斜線ベクトル行列に変換する斜線ベクトルへの変換のための処理工程と、拡大加工されたビットマップ領域に対し、前記斜線ベクトル行列から基準となるアウトライン座標を求めると共に、前記斜線ベクトル行列の連続する複数のベクトルの変化量からあらかじめ定義される補正データを参照して前記基準となるアウトライン座標をドット単位で補正して線引きを行う線引きのための処理工程と、前記ベクトル化済み情報を参照して新たな始点がなくなるまで前記始点検索、直交ベクトルへの変換、斜線ベクトルへの変換、線引きのための各処理工程を繰り返し、生成された線データの内部を塗り潰す塗り潰しのための処理工程と、を備えて成ることを特徴とする。
【0012】
本発明は、上述した構成により、フォントメモリに用意されたビットマップデータを一旦ベクトルデータに置き換え、ベクトルデータ上での平滑化により、拡大率が大きくなっても滑らかなフォントを再現することを特徴とする。このためにビットマップを8方向のベクトル(上下左右4方向と斜め4方向)で表現し、連続する6ベクトルの変化量から最適なベクトル方向を決定し、更に、6ベクトルの変化量から、ベクトルで表現しきれない1ドット単位での補正を行う。
【0013】
本発明によれば、拡大しても品質の良い印刷もしくは表示が可能である他、ビットマップフォントを使用しているため圧縮が可能である。通常、アウトラインフォントを搭載する機器においても解像度の低い小さなサイズの文字を扱う場合、印刷品位劣化のためにビットマップフォントを用いて印字することがあるが、本発明によれば、文字の大小にかかわらず同じ品質で文字の印刷が可能となる。
【0014】
【発明の実施の形態】
以下、図面を参照しながら本発明の一実施形態について詳細に説明する。
【0015】
図1は、本発明が採用される文字出力装置の内部構成を示すブロック図である。本発明実施形態では、文字出力装置としてテープ印刷装置を例示して説明する。テープ印刷装置は、キー入力した所望の文字などに基づいて作成した印刷画像をカートリッジ内のテープにサーマル方式で印刷すると共にそのテープの印刷部分を切断してラベルを作成するものである。
【0016】
図1に示すように、テープ印刷装置は、基本的な構成として、CPUを制御中枢とする制御部1、キーボードやディスプレイを持ちユーザとのインタフェースとなる操作部2、サーマル式の印刷ヘッドによりテープカートリッジにあるテープに印刷を行う印刷部3から成る。操作部2と印刷部3は、各種ドライバを内蔵して各部回路を駆動する駆動部4を介して制御部1に接続される。操作部2、印刷部3、駆動部4については本発明の主旨とは直接関係しないためこれ以上の詳細説明は省略する。
【0017】
制御部1は、CPU11、プログラムメモリ12、ワークRAM13、フォントメモリ14、入出力制御部15から構成され、これら各ブロック11,12,13,14,15は、双方向の内部バス16を介して共通に接続される。CPU11は、プログラムメモリ12に格納された後述する各プログラムに従いワークRAM13を使用して本発明のアウトラインスムージング処理装置として機能する他、テープ印刷装置全体の制御を行う。
【0018】
ワークRAM13は作業領域として使用され、プログラムによるアウトラインスムージング処理の経過データが都度書き込まれる。フォントメモリ14には、文字等のフォントデータがドットマトリクス状のビットマップ形式で格納され、文字等を特定するコードデータが与えられたときに対応するフォントデータを出力する。
【0019】
入出力制御部(IOC)15は、CPU11の機能を補うとともに、各種周辺回路とのインタフェース信号を扱うための論理回路が、ゲートアレイやカスタムLSIなどにより構成され組み込まれている。例えば、キーボードからの各種指令や入力データなどをそのまま、あるいは加工して内部バス16に取込むとともに、CPU11と協動してCPU11により内部バス16に出力されたデータや制御信号を、そのまま、あるいは加工して駆動部4に出力する。
【0020】
図2は、図1に示す制御部1が持つ機能をメモリ上に展開して示した図である。上述したように、制御部1はアウトラインスムージング処理装置として機能し、ここでは、文字フォントの加工時、そのビットマップデータに基づき一旦ベクトルデータに変換し、ビットマップデータの斜め方向において隣接するデータ配列が不連続となる部分を含み、ベクトルの始点からそのベクトル方向の終点に向かって線引きを行なってドット補正を施し、かつ、内部を塗り潰してビットマップデータを再生成して印刷もしくは表示出力を行なうための制御を行う。
【0021】
図2に示すように、本発明のアウトラインスムージング処理装置(制御部1)は、フォントメモリ14と、フォント加工装置(CPU11)と文字出力部20で構成される。フォント加工装置11は、機能的に、始点検索・決定部111、直交ベクトル抽出部112、斜線ベクトル化変換部113、線引き処理部114、塗り潰し処理部115、線幅補正処理部116で構成される。これら各ブロック111〜116は後述するロジックに従うプログラムによって動作する。
【0022】
始点検索・決定部111は、フォントメモリ14にあるビットマップデータに対し、あらかじめ規定された条件に従いベクトルの始点となる座標を求め、直交ベクトル抽出部112に供給する。直交ベクトル抽出部112は、始点検索・決定部111によって出力される始点座標から順にドットの変化方向を調べ、上下左右4方向の直交ベクトル行列に変換すると共に、そのドットがベクトル化済みであることを示すベクトル化済み情報(フラグメモリ131)の内容を更新する。
【0023】
斜線ベクトル変換部113は、変換された直交ベクトル行列の連続する6ベクトルの変化量から、あらかじめ斜線化すべきパターンが定義される斜線化判定テーブル132の内容を参照して斜線ベクトル行列に変換して線引き処理部114へ供給する。
【0024】
線引き処理部114は、拡大等加工されたビットマップ座標に対し斜線ベクトル行列の連続する6ベクトルの変化量からあらかじめ定義される補正データを参照して線引きを行う座標をドット単位で補正し、補正されたアウトライン座標間を線で結ぶ。線引き処理部114は、変換されたベクトル行列から基準となるアウトライン座標を求める基準アウトライン演算部と、連続したベクトル値のパターンによってあらかじめ定義される補正データが設定される補正テーブルと、前記補正テーブルを参照することにより前記基準となるアウトライン座標を補正し、この補正されたアウトライン座標間を線で結ぶ線分生成部を備えている。ここでアウトライン座標として、外枠用線と塗り潰し用線の2種類が生成される。
【0025】
塗り潰し処理部115は、先のアウトライン座標補正を行うことにより得られるフィルラインの内側を塗り潰した後、フォント外枠が描画されているワークメモリ13のアウトライン用描画領域ならびにフィルライン用描画領域(いずれもビットマップ領域134)に展開された内容を論理和演算して重ね合わせる処理を行う。
【0026】
線幅補正処理部116は、線引き処理部114によって生成されたビットマップデータを追って定義するXY両方向にそれぞれ1ドット分削除することによってベクトル化によりXY方向に1ドット分太くなったビットマップの線幅補正を行う。
【0027】
文字出力部20は、印刷のためにワーク用ビットマップ領域134からから所望のビットマップを読み出しドット展開して入出力制御部15、駆動部4を介し印字部3に出力する。
【0028】
尚、上述した各処理部111〜116の詳細なロジックはフローチャートを使用して以降詳細に説明する。
【0029】
本発明の動作説明に先立ち、以降に説明する座標とビットマップデータの定義について図3を参照しながら説明する。図3では、座標とビットマップの定義を(a)に、ベクトルの定義を(b)に示してある。
【0030】
図3(a)に示すように、座標XとYを定義し、以降で座標値を表す場合、[X,Y]で表記する。また、便宜上、Xの正方向を「右」、負方向を「左」、Yの正方向を「下」、負方向を「上」と表現する。ビットマップデータは、白が0x0(「0」を16進表記したもの),黒が0x1(「1」を16進表記したもの)とし、与えられたビットマップデータの座標外([0,−1]など)は白(0x0)であるとする。
【0031】
ベクトルの向きと番号は図3(b)で示すように定義される。すなわち、ベクトルは上下左右0〜7の8方向で表現され、従って下に示すように表記されるものとする。尚、ベクトルの1と5、3と7は1文字では区別できないため、脇に「’」または「.」を付して区別するものとする。
【0032】
図53にベクトル定義が示されている。図53に(a)で示されるように、ベクトルは有向線分OPで表され、ベクトルを太字表現するのが一般的であるが、ここでは↑aで表記する。また、図53に(b)で示すように、X−Y座標上のベクトル↑vは、基本ベクトル↑i、↑jを使用して、↑v=x・↑i+y・↑jで表される。ここでは単に↑vと表記する。また、図53に(c)で示すように、各方向ベクトルを定義し、それぞれが行列に置換される。この各ベクトルの集合をベクトル空間、ベクトル群といい、↑vctと表すこととする。
【0033】
各方向ベクトルについて、x軸を基準とした回転角度は以下のようになる。
∠(↑a)=0,∠(↑b)=π/4,∠(↑c)=π/2,
∠(↑d)=3π/4,∠(↑e)=π,∠(↑b)=π/4
∠(↑f)=5π/4,∠(↑g)=3π/2,∠(↑h)=7π/4
各ベクトル間の回転角度は、上記各値の減算で求められ、
∠(↑f−↑d)=∠(↑f)−∠(↑d)=π/2となる。
【0034】
ここで、回転角度の計算等を簡単にするため、各ベクトルに「シンボル」として、0〜7の数字を割り当てる。すなわち、以下のような割り当てがなされる。
↑a→“0” ↑b→“1” ↑c→“2” ↑d→“3” ↑e→“4”
↑f→“5” ↑g→“6” ↑h→“7”
この場合、上述した↑vctは以下のようになる。
Figure 0003791259
ベクトル群↑vctのn番目のベクトルは、↑vct[n]と表記し、例えば、↑vct[2]=↑c=“2”となる。
【0035】
図4は、本発明実施形態による処理とデータの流れをフローチャートで示した図である。以下、動作の流れを概略説明する。
【0036】
まず、始点検索・決定部111は、文字フォントメモリ14から読み出されたビットマップデータに対し、ベクトルの始点候補となる座標を求める。また、そのビットマップと後述するベクトル化済み情報から新たなベクトルの始点座標を求め、その始点座標を都度直交ベクトル抽出部112へ渡す(ステップS41,S42)。
【0037】
直交ベクトル抽出部112は、始点からビットマップをスキャンし、上下左右4方向の直交ベクトル行列に置換することにより始点から1周分の直交ベクトルを抽出し、抽出された直交ベクトル行列を斜線ベクトル変換部113へ渡す(ステップS43)。斜線ベクトル変換部113は、得られた直交ベクトル行列の連続する6ベクトルの変化量から後述する斜線化判定テーブル132を参照し、斜線ベクトル行列に変換し、線引き処理部114に処理を委ねる(ステップS44)。この時点で上下左右4方向に斜め4方向を加えた8方向のベクトルになる。
【0038】
線引き処理部114は、座標を補正しながらアウトラインを作成するもので、拡大加工したビットマップ座標に対してベクトルを辿って線を引く際、得られた斜線ベクトル行列の連続する6ベクトルの変化量から後述する補正テーブル133を参照し、線を引く座標を1ドット単位で補正する(ステップS45)。ここで、線は外枠用線と塗り潰し用の線の2種類を作成し、この線データは、全ての始点に対する処理が終了するまでワーク用ビットマップ領域134に保持される。このように、斜線ベクトルからアウトライン座標に補正を加えて線引きを行う。そして、再度ベクトル始点の検索(ステップS41)を行い、新たな始点が無くなるまで上述したステップS41〜S45に示す処理を繰り返し、塗り潰し処理部115へ処理を委ねる。
【0039】
塗り潰し処理部115は、線引き処理部114により生成される塗り潰し用の線の内部を塗り潰した後、外枠用の線と重ね合わせる(ステップS46)。線幅補正処理部116は、ベクトル化により全体に線幅が太くなるため縦横1ドット線を細くするための処理を行う(ステップS47)。
【0040】
以下、ベクトル始点の検索(ステップS41)から線幅補正処理(ステップS47)に至る処理の詳細について図5〜図10に示す詳細フローチャートを参照しながら説明する。
【0041】
まず、始点検索・決定部111による始点検索・決定のための処理(図4におけるステップS41,S42)から説明する。
【0042】
図5に、始点検索・決定のための処理手順がフローチャートで示されている。ここでは、まず、座標[0,0]から始点検索を開始する(ステップS411)。そして、X方向に座標をスキャンし、1ドットずつ始点の条件に合うか否かをチェックする(ステップS412)。
【0043】
始点の条件としては、現座標位置ドット([X,Y])が黒、1ドット前([X−1,Y])が白であって、フラグメモリ131に設定されてあるベクトル化済み情報の対応するドットがセットされていない、いわゆる未だベクトル化が済んでいないドットを始点とする。尚、フラグメモリ131に設定されるベクトル化済み情報は、後述する直交ベクトル抽出処理(ステップS43)において更新される。初期値は全てクリアされているものとする。
【0044】
そして上述した始点条件に合ったドットを始点とし、後述する直交ベクトルの抽出処理に進む。ここで、始点が見つからなければYを+1(Yが端の座標まで到達しているときにはXを+1、Y=0に)更新して(ステップS413)、ステップS411以降の処理を繰り返す。
【0045】
始点決定の例につき、図11に示すビットマップを参照しながら説明する。図11において、(a)は1回目、(b)は2回目、(c)は3回目の始点検索の場合におけるビットマップとベクトル化済み情報のそれぞれを示している。
【0046】
1回目の検索では、フラグメモリ131におけるベクトル化済み情報が全てクリアされているため、最初に「白→黒」となり、ここでは[6,2]が始点となる。2回目の検索の場合、[6,2]に対する直交ベクトル化により、「ベクトル化済み情報」が更新されている。「白→黒」となるドット[6,3][6,4][6,5][6,6]等はベクトル化済み情報がセットされているため始点にはならない。従って、条件に合う最初のドット[15,5]が始点となる。3回目の検索の場合、1,2回目の直交ベクトル化により、「白→黒」となるドットは全て「ベクトル化済み情報」としてフラグメモリ131にセットされる。従って、3回目の始点は無しと判断され、後述する塗り潰し処理(ステップS46)に進む。
【0047】
次に、直交ベクトル抽出部112による直交ベクトルへの変換処理(図4ステップS42)について詳細に説明する。図6に直交ベクトル変換処理のための手順がフローチャートで詳細に示されている。
【0048】
以下、図6に示すフローチャートを参照しながら詳細に説明する。直交ベクトルへの変換処理とは、ビットマップを直交ベクトル値(→、↓、←、↑の4種)に変換する処理をいい、始点から順にドットの変化方向を調べ、ベクトル化されたデータは、↑VCT=[0,0,2,4,....]のような行列となって位置情報は無くなる。
【0049】
まず、始点のベクトル値を求める(ステップS431)。次にベクトル化するドット位置を始点からベクトル方向に移動(ステップS432)して移動したドット位置の周辺ドットを調べ、ベクトル値を決める(ステップS433)。そして、ベクトル化するドット位置をベクトル方向に移動(ステップS434)してベクトル化したドット位置が始点候補になり得る場合(ステップS435)、ベクトル化済み情報をセットし(ステップS436)、そうでなければ、ドット位置の移動以降(ステップS432〜S435)を繰り返す。
【0050】
尚、始点のベクトル値の決定は、図12に示す<表1>に従って決定し、ドット位置を始点からベクトル方向に移動する。ここでは、現位置ドットに対してベクトル値を決定するものであり、1つ前のベクトル値からベクトル検索方向パターン順序を決め、その順序に従い各ベクトル検索方向のパターンの条件を調べ、最初に一致した条件に対応する値をベクトル値としている。図13に、1つ前のベクトルと検索順位の関係が、図14に検索順位と検索方向パターンの条件との関係が、それぞれ、<表2><表3>として示されている。
【0051】
尚、検索条件は、排他的でなく、ベクトル0と4、また、2と6が決定される条件は両立する。従って、検索条件に従って処理を進めないと正しいベクトルは得られない。ここでの検索順序は、ベクトルが「左に回転する方を優先」するように決められている。
【0052】
ところで、現位置ベクトル値が上方向“6”である場合、上方向へ移動したドットは始点候補となる。従って、始点の検索処理でこのドットは除外する必要があるため、フラグメモリ131に「ベクトル化済み情報」としてセットする。ベクトル方向へのドット移動は、図15に示す<表4>に従う。つまり、<表4>に従いベクトル化を行うドット座標位置を移動する。そして、ベクトル化するドット位置が始点に戻るまで上述したステップS432〜S436の処理を繰り返す(ステップS437)。
【0053】
図16を参照しながら直交ベクトル化の例を説明する。対応する「ベクトル化済み情報」は、上述した始点検索の例として示し、(a)は1回目の始点検索時、(b)は2回目の始点検索時における、それぞれの直交ベクトルデータ、直交ベクトル変換終了時における「ベクトル化済み情報」が示されている。
1回目は始点[6,2]、直交ベクトルデータ↑VCT1=[0,0,0,0,0,0,0,0,0,2,0,0,2,0,2,0,2,2,0,2,2,2,2,2,2,2,2,4,2,2,4,2,4,2,4,4,2,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]、2回目は、始点[15,5]、直交ベクトルデータ↑VCT2=[4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,6,4,6,4,6]となる。
【0054】
次に斜線ベクトルへの変換部113による斜線ベクトルへの変換処理について説明する。図7に斜線ベクトル変換のための処理手順がフローチャートで示されている。以下、図7に示すフローチャートを参照しながら斜線ベクトル変換処理について詳細に説明する。
【0055】
ここでは、直交ベクトル↑VCT={ ... ,VCT[n−2],VCT[n−1],VCT[n],VCT[n+1],VCT[n+2], ... }において、VCT[n−2]とVCT[n−1]や、VCT[n]とVCT[n+1]などの連続する2つのベクトル要素の変化方向につき、図17に示す<表5>のように定義する。尚、同じ値である場合には同方向と定義する。
【0056】
ここで、ベクトル行列の最終要素と初期要素は、連続しているものとする。例えば、ベクトル行列↑VCT={VCT[0],VCT[1], ... ,VCT[n−2],VCT[n−1],VCT[n]}において、VCT[n]とVCT[0]は連続した要素である。
【0057】
また、直交ベクトル行列↑VCT={ ... ,VCT[n−2],VCT[n−1],VCT[n],VCT[n+1],VCT[n+2],VCT[n+3], ... }において、VCT[n−2]=Vn2(2つ前の直交ベクトル),VCT[n−1]=Vn1(1つ前の直交ベクトル),VCT[n]=V0(現直交ベクトル),VCT[n+1]=V1(1つ先の直交ベクトル),VCT[n+2]=V2(2つ先の直交ベクトル),VCT[n+3]=V3(3つ先の直交ベクトル)と定義する。
【0058】
斜線ベクトル変換部113は、直交ベクトルの左方向変化個所で条件に合う場合、斜線ベクトル(右上ベクトル、右下ベクトル、左下ベクトル、左上ベクトル)に置換する機能を持つ。置換の様子を図18に<表6>として示す。ここでの処理は、2直交ベクトルを1斜線ベクトルに変換するため、変換した分だけベクトルが少なくなる。
【0059】
変換条件は以下のとおりである。すなわち、まず、連続したベクトル要素Vn2〜V3について変化方向を調べ、V0→V1が左回転で、かつ、各ベクトル要素の変化が図19に<表7>で示す条件に一致した場合にV0とV1を斜線ベクトルに変換する。上述した変換条件をV0=「↓」のときのベクトルパターンとしたのが図20に<表8>として示してある。
【0060】
ここでベクトル演算方法について説明する。直交ベクトル抽出部112によって作成された直交ベクトル行列に対して斜線化条件を調べ、新たな斜線化ベクトル行列に出力するものである。斜線化されたベクトルは、次の斜線化条件には影響しない。
【0061】
図7に示すフローチャートを参照しながらベクトル演算のための処理の流れを説明する。ベクトル演算は直交ベクトル行列の先頭位置から開始する(ステップS441)。Vn2〜V2の位置は↑VCT={V0,V1,V2, ... ,Vn2,Vn1}となる。次に、V0→V1の回転方向を調べる(ステップS442)。ここで、左回転ならばステップS444以降の処理に進み、左回転以外の場合、現直交ベクトル値V0を斜線化ベクトル値とし、検査する直交ベクトル行列の要素位置を次のベクトルに移動する(ステップS443)。
【0062】
例えば、Vn2〜V2の位置を↑VCT={V0,V1,V2, ... ,Vn2,Vn1}から、↑VCT={Vn1,V0,V1,V2, ... ,Vn2}のように1つシフトする。
【0063】
ステップS444では、Vn2〜V3のベクトルの変化方向を以下の演算式(1)により算出する。
dr(V[n−1]→V[n])=
(V[n]−V[n−1]+10)AND 0x07 …(1)
演算の結果、“0”は左回転、“2”は同方向、“4”は右回転、“6”は反対(ありえない)を意味する。
【0064】
次に、変化方向を現ベクトルの前後に分け、以下の演算式(2)(3)に従い重み付けを行う(ステップS445)。
・後方向の変化重みW1=
{dr(V1−V2)×3+dr(V2→V3)}/2、 …(2)
・前方向の変化重みW2=
{dr(Vn1−V0)×3+dr(Vn2→Vn1)}/2 …(3)
【0065】
そして、このw1、w2に対する斜線化判定テーブル132の値を調べる(ステップS446)。ここで、値を調べ(ステップS447)、“1”の場合、現ベクトルを斜線化して斜線化ベクトル行列に入れる。演算式は以下の(4)に従う。
斜線化ベクトル値=(現ベクトル値+0x07)AND 0x07 …(4)
【0066】
このことにより、“0”は“7”、“2”は“1”、“4”は“3”、“6”は“5”に変換される。また、斜線化対象になった直交ベクトル配列要素の次の要素は斜線化ベクトルに含まれるため、検査する直交ベクトル行列の要素位置を2つ移動する(ステップS448)。
【0067】
一方、値が“0”の場合、現直交ベクトル値V0を斜線化ベクトル値とし、検査する直交ベクトル行列の要素位置を次のベクトルに移動する(ステップS449)。そして、直交ベクトルの先頭位置に戻るまで上述したステップS441〜ステップS449までの処理を繰り返す(ステップS450)。
【0068】
尚、最終ベクトルを斜線化した場合の始点の移動処理に関し、直交ベクトル行列の最後のベクトルと先頭ベクトルが斜線化対象となった場合(↑VCT={V1,V2, ... ,Vn2,Vn1,V0}においてV0−V1が斜線化される場合)、斜線化ベクトル行列に入れた先頭ベクトルを削除し、始点座標から、削除した先頭ベクトル方向に移動した座標を新たな始点とする。
【0069】
斜線化判定テーブル132の内容を図21に示す。斜線化判定テーブル132には、上述したように重み付け演算して得られるw1,w2が示す値に対して斜線化するか否かのデータが設定される。このテーブル値を変更することによって斜線化するパターンを変更できる。
【0070】
ベクトル斜線化の例につき、図22を参照しながら説明する。図22において、(a)は、1回目の始点決定時、(b)は、2回目の始点決定時における斜線化ベクトルデータが示されている。
【0071】
(a)は、始点[6,2]、斜線化ベクトルデータ↑VCT1B=[0,0,0,0,0,0,0,0,0,1,0,1,1,2,1,2,2,2,2,2,2,2,2,3,2,3,3,4,3,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]である。
【0072】
(b)は、初期始点が[15,5]、斜線化ベクトルデータ↑VCT2B=[4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,7,7,7,6,6,6,6,6,6,5,5,5]となっている。
【0073】
ここでは、最終ベクトルと先頭ベクトルが斜線化され削除された先頭ベクトルは“4”、従って、始点は[−1,0]移動し、新始点は[14,5]になる。
【0074】
次に、線引き処理部114によるドット補正を含む線引き処理(図4におけるステップS45)について説明する。ここで、線引き処理は、アウトラン座標補正のための処理と、補正によって選られる座標間の線引きするまで処理を含むものとする。図8に線引き処理のための処理手順がフローチャートで示されている。以下、フローチャートを参照しながら詳細に説明する。
【0075】
まず、アウトライン座標補正のための処理から説明する。ここでは、基のビットマップから抽出された斜線化ベクトル行列から、ベクトルの始点、終点座標を求め、X方向、Y方向に拡大した新たなビットマップ領域(ワーク用ビットマップ134)にアウトライン(線)を描画する。ベクトルの始点、終点座標は、斜線化ベクトル領域の連続する6つの要素を参照することによって1ドット単位で補正を加えるものである。ここではアウトラインとして、外枠用線と塗り潰し用線の2種類を作成する。従って、拡大加工処理のためのビットマップ領域を2つ必要とする。
【0076】
まず、始点とベクトル値から基準となるアウトライン座標を決める(ステップS451)。ここでは、補正データを参照する前の基準となるアウトライン座標を求めるために演算を行う。
【0077】
具体的に、X,Y方向の倍率をそれぞれBX、BYとし、元の始点をX0,Y0とした場合、拡大加工後の始点[X1,Y1]は、[BX×X0,BY×Y0]で求める。以降の基準アウトライン座標の演算は、前の座標(最初は始点座標)から斜線化ベクトル値に応じた移動量を加えた値を次の座標位置とする。斜線化ベクトル値と移動量の関係を図23に<表9>として示す。
【0078】
アウトライン基準座標の例を以下に示す。すなわち、斜線化ベクトル変換部113により作成された斜線化ベクトル行列を、BX=2,BY=3で拡大したアウトライン座標は、始点座標[X0,Y0]を[6,2]、斜線化ベクトル行列↑VCT1B=[0,0,0,0,0,0,0,0,0,1,0,1,1,2,1,2,2,2,2,2,2,2,2,3,2,3,3,4,3,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]として、拡大後の始点座標[X1,Y1]は[12,6]となり、始点座標以降の座標演算は図24に<表10>で示すようになる。
【0079】
アウトラインからビットマップデータを得るためには、図25に<表11>として示す座標間に順に線引きを行うことになる。しかしながら、これだけでは単に斜め線を45度方向にしただけであって、ビットマップデータは滑らかにならない。そこで、以下に説明するように、各座標を前後のベクトルデータを参照することにより、1ドット座標単位で補正を加えてより滑らかなビットマップデータとなるように配慮がなされている。
【0080】
すなわち、基準となるアウトライン座標を決めた後、ステップS452以降の補正データによる基準座標の補正処理が行われる。ここでは上述のようにして求めた基準アウトライン座標に対し、前後のベクトル値を参照して補正データにより補正を加えた線引き用アウトライン座標を求める。補正には、基準座標をそのまま線引き用座標とする「補正なし」と、その基準座標は線引きに使用せず、次回以降の線引き処理に含める「スキップ」と、基準座標に対し、1ドット単位で座標位置を移動する「ドット補正」の3種類がある。尚、補正データは前後のベクトル値のパターンによって個々に決められた値であって補正テーブル133にその値が設定される。
【0081】
以下、補正データの参照方法について説明する。説明に先立ち、現ベクトルとその周辺ベクトルを以下のように定義する。すなわち、斜線化ベクトル行列↑VCTB={ ... ,VCTB[n−3],VCTB[n−2],VCTB[n−1],VCTB[n],VCTB[n+1],VCT[n+2], ... }において、連続する6つのベクトル要素、VCTB[n−3]をVn3(3つ前のベクトル)、VCTB[n−2]をVn2(2つ前のベクトル),VCTB[n−1]をVn1(1つ前のベクトル),VCTB[n]をV0(現ベクトル),VCTB[n+1]をV1(1つ先のベクトル),VCTB[n+2]をV2(2つ先のベクトル)と定義する。
【0082】
この場合、まず、現ベクトルV0が直交ベクトル(0,2,4,6)か斜線化ベクトル(1,3,5,7)かを調べる。直交ベクトルの場合、フラグa0を“0”とし、斜線ベクトルの場合、フラグa0を“1”にセットする。
【0083】
そして、Vn2〜V3のベクトルの変化方向を以下の演算式(5)により算出する(ステップS452)。
Figure 0003791259
ここで、drの演算結果が“0”のとき左回転、“1”のとき左45度回転、“2”のとき同方向、“3”のとき右45度回転、“4”のとき右回転、“5”のとき右135度回転(ありえない)、“6”のとき反対(ありえない)、“7”のとき左135度回転(ありえない)とする。
【0084】
次に、以下の演算式(6)により、現ベクトルに対応する補正データが設定されたテーブル132のアドレスaddrを算出する(ステップS453)。
Figure 0003791259
【0085】
そして、補正データHのaddrバイト目のデータとして求める。ここで補正データHは、“0”〜“8”の9値をとるものとする。Hが“0”の場合、「補正なし」(ステップS456)、Hが“8”の場合、現ベクトルにより決められた基準座標は線引きに使用せず、次回以降の線引き処理に含める「スキップ」(ステップS458)、Hが“1”〜“7”の場合、後述するアウトライン座標補正処理を行い1ドット単位で座標位置を補正する。補正データHと補正方向の関係は、図26に<表12>として示されている。
【0086】
アウトライン座標補正処理方法について説明する。補正の方向Hdrは、以下の演算式(6)を演算することにより決定する(ステップS457)。
Hdr=(H+V0+7)AND 7 …(6)
【0087】
そして、図27に示す<表13>に従いXY方向の補正ドット数を求める(ステップS459)。ここで、HX、HYは、拡大倍率毎に定める補正ドット数であり、補正後に隣の線とつながってしまわないように拡大倍率の1/2以下とする。図28に<表14>として倍率毎の補正ドット数が参考値として示されている。現ベクトルによって確定された基準座標に対して補正ドット数だけ移動した座標を線引き用座標とする(ステップS480)。
【0088】
尚、上述したベクトル計算は、補正データを格納しているテーブル132のアドレスを求めているにすぎず、ここでは、補正データそのものは計算で求めておらず、連続したベクトル値のパターンによって個々に補正データを決めておき、その補正データの集合体である補正テーブル132を参照する形式を採用している。これは、例えば、フォント書体別に補正データを差し替えることによって書体の特徴を生かしたアウトラインスムージング処理を可能にするものである。
【0089】
ドット補正の例について2つ例示して説明する。図29に<表15>として示す例は、始点座標[X0,Y0]を[6,2]、斜線化ベクトル行列↑VCT1B=[0,0,0,0,0,0,0,0,0,1,0,1,1,2,1,2,2,2,2,2,2,2,2,3,2,3,3,4,3,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]、X方向3倍、Y方向4倍の拡大文字につき、X方向補正ドット値“1”、Y方向補正ドット値“2”で線引きするケースを例示している。表中、LINE{(X1,Y1)−(X2,Y2)}は、座標(X1,Y1)−(X2,Y2)間に線を引くための処理を示す。また、LINE SKIPは、線を引く処理をスキップすることを示す。
【0090】
図30に<表16>として示す例は、始点[14,5]、斜線化ベクトルデータ↑VCT2B=[4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,7,7,7,6,6,6,6,6,6,5,5,5]、X方向3倍、Y方向4倍の拡大加工文字につき、X方向補正ドット値“1”、Y方向補正ドット値“2”で線引きするケースを例示している。
【0091】
ステップS480以降の線引きについて詳細説明を行う。ここでいう線引き処理は、基のビットマップデータサイズにX,Y方向の拡大率を乗じたサイズのデータ領域を2つ確保し、上述したように決められた線引き用座標の2点間に外枠用線、及び塗り潰し用線としてドット補間して描画するものである。ここでは、外枠用線をストロークライン、外枠用描画領域をストローク領域、塗り潰し用線をフィルライン、塗り潰し用描画領域をフィル領域と呼称して説明を継続する。また、線を引く対象の2点をP1=(X1,Y1)、P2=(X2,Y2)とする。
【0092】
まずストロークライン処理から説明する。ここでは、ストローク領域にフォント外枠用線として上述のように決められた線引き用座標の2点間にドットを補間して描画する。このとき、滑らかな線を得るために、線の傾きによっては基準軸を入れ替え(ステップS482)ドット補間する。
【0093】
具体的には、線引き基準軸決定のために、X、Yの変化量の大きい方を基準軸とし、2点間のX,Yの差分ΔX=ABS(X2−X1)、ΔY=ABS(Y2−Y1)を求め、ΔX≧ΔYのときX軸基準としてX方向をスキャンし、ΔX<ΔYのときY軸を基準としてY方向をスキャンする。ここでABSは絶対値を求めるための関数である。
【0094】
X軸基準線引き処理(X方向スキャン)において、X1、X2を比較し、X座標の小さいほうから順にドットを描画する。ここでX1≧X2のとき、P2→P1順に描画(開始点PS=P2、終了点PE=P1)し、X1<X2のとき、P1→P2の順に描画(開始点PS=P2、終了点PE=P2)する。
【0095】
Y軸基準線引き処理(Y方向スキャン)において、Y1、Y2を比較し、Y座標の小さい方から線を引く。ここで、Y1≧Y2のとき、P2→P1順に描画(開始点PS=P2、終了点PE=P1)し、Y1<Y2のとき、P1→P2の順に描画(開始点PS=P2、終了点PE=P2)する。
【0096】
ストロークライン処理は、始点、終点、補間点全てにドットを描画し、描画されるドットは、ストローク領域のデータとの論理和(OR)演算とする(ステップS483)。
【0097】
次にフィルライン処理について説明する。ここでは、フィル領域にフォント塗り潰し用線として、上述のようにして決められた線引き用座標の2点間にドットを補間して描画する。ドット補間のための基準軸はX方向のみとする。
【0098】
具体的に、X軸基準線引き処理(X方向スキャン)は、X1、X2を比較し、X座標の小さい方から順にドットを描画する(ステップS484)。X1≧X2のときにP2→P1順に描画(開始点PS=P2、終了点PE=P1)し、X1<X2のとき、P1→P2の順に描画(開始点PS=P2、終了点PE=P2)する。フィルライン処理は、始点、補間点にドットを描画し、終点は未処理とする。また、描画されるドットは、フィル領域のデータとの排他的論理和(XOR)演算とする(ステップS485)。
【0099】
上述したストロークライン、フィルライン処理において、2点間に直線を描画するアルゴリズムについて図31〜図41を参照しながら詳細に説明する。
図31に示す<グラフ1>において、2点間(図中★印)に直線を引く場合、グラフ上に直線を描くかのようにメモリ上に小数点付きの値の座標にドットを描画することはできない。実際には、図中、●で示すように、2点間の直線に最も近い整数値の座標上にドットを補間することになる。
【0100】
このような補間点群は、図32に<リスト1>として示すアルゴリズムにより順に求めることができる。ここで、補間点群は、(x+x1,y)で表される。つまり、xが1ステップカウントされる毎に、小数点付きの座標値を最も近い整数へ丸める演算(round関数)を行う。図32に示す例では整数への丸め関数roundを使用したが、これを通常の四則演算に置き換えた場合は図33に<リスト2>で示すアルゴリズムが得られる。ここで補間点群は(x,y)である。
【0101】
実際、図33に示す演算式をプログラムで実行する場合は別として、ハードウェアで実現しようとした場合、dy/dxの除算、小数点付き変数1,1/2との比較などを含んでいることがネックとなる。このため、図34または図35に、それぞれ<リスト3><リスト4>として示すようにアルゴリズムを変形しておく。図32〜35にリスト表示したアルゴリズムについては本発明要旨と直接関係しないためここでの説明は省略する。
【0102】
尚、これまでの説明はdx>=dyとして説明してきた。これは、「xを1ステップカウントインクリメントする毎にyを1ステップカウントインクリメントするか否か」という判断をしているためであり、増分dy/dxが1ステップカウント以上になる場合には適用できない。試しに、dx<dyの場合で実行してみれば図36にグラフ表示(<グラフ2>)したようになってしまう(Y座標正方向=下方向)。
【0103】
これを回避するためには、1とdxとの比較を繰り返し処理に変更すればよい。このためのアルゴリズムは図37に<リスト5>として示すようになる。このアルゴリズムによって、増分dy/dxが1より大きい場合でも図38にグラフ表示(<グラフ3>)するように直線に最も近い座標点群が得られる。
【0104】
ところで、dx<dyの場合の処理は、上述したアルゴリズムで問題なく直線生成アルゴリズムになる。しかしながら、dxがdyに対してより大きな値(傾きが急な場合)は、図39にグラフ表示(<グラフ4>)するように補間されるドットが極端に少なくなってしまう。
【0105】
実際、塗り潰し用のアルゴリズムとしては有用である。しかしながら、フォント外枠を得るための線引きとして用いた場合は、図39に示すように、ドットが密の部分とドットが疎の部分と入り混じり奇麗な外形を持つフォントにはならない。
【0106】
線の傾きによらず、補間点群が密になるようにするには、dx,dyの大小によってケース分けを行う。dx<dyの場合は、ちょうどX軸とY軸を入れ替えて演算するような処理を行う。つまり、yを1ステップカウントインクリメントする毎にxを1ステップカウントインクリメントするか否かの判断を行ない、増分dy/dxまたはdx/dyを1以下に正規化する。この場合、アルゴリズムは、図40に<リスト6>として示す形態となる。このアルゴリズムによれば、結果、図41に示すようにグラフ表示(<グラフ5>)され、ドットが密に描画される。
【0107】
以上まとめると、ストロークライン(外枠用線引き)用アルゴリズムは以下のようになる。つまり、dx>=dyの場合、xを1ステップカウントインクリメントする毎にyをインクリメントするか否かの判断を行う処理(Xスキャン線引き処理)が行われる。dx<dyの場合、yを1ステップカウントインクリメントする毎にxをインクリメントするか否か判断する処理(Yスキャン線引き処理)が行われ、始点、終点、補間点は、ストローク領域データと論理和(OR)演算が行われる。
【0108】
次にストロークラインを用いた塗り潰し処理について説明する。塗り潰しのアルゴリズムは、図42に<リスト7>として示されるように、Y方向の1つ前のドットとの排他的論理和(XOR)演算を行うことにより実現される。これを図43(a)に示す図形(<グラフ6>)の例で実行した場合、図43(b)のようになり、特に問題は生じない。
【0109】
次に、ストロークライン処理を使って描かれた図44(a)の例(<グラフ7>)で実行した場合、結果は図44(b)のようになり、うまく塗り潰しが行われない。同じく図45(a)に示す長方形(<グラフ8>)を使って実行した場合、図45(b)のようになり、辺a−d、辺b−c間の塗り潰しがうまくできない。
【0110】
これらの原因として、塗り潰しアルゴリズムが1つの点から1つの点の間を埋める処理を目的とするのに対して、例では、線分a−c,b−c,a−d,b−cが塗り潰し方向であるY方向からみて1ドット以上の点で描かれているためである。
【0111】
線分a−c,b−cが1ドット以上の点で描かれるのは、それらがXスキャン線引き処理で描かれたためであるため、この問題を解決するためには、線分の傾きに関係なく、Xスキャン線引き処理を行えばよい。
【0112】
座標点間を単純にXスキャン線引き処理を行った例、図46(a)を例示(<グラフ9>)して塗り潰しを行ってみる。この場合、図46(b)に示すように、Xスキャン、Yスキャン線引き処理を併用した例より改善はされたが、頂点A,Bが1ドットのみであったために、塗り潰し終点が存在せず、線を引いてしまう。
【0113】
フィルライン(塗り潰し用線引き)処理について説明する。図46(b)において、点A,Bは図形の頂点であり、塗り潰す終点を描くことは難しい。そのために、頂点A,Bには、線引き処理において、黒点を描かずに白点にすればよいが、単純に線引き処理の始点、終点を白点にするような処理では、頂点Cまでも白点になってしまい、今度は点C以降に線が引かれてしまう。
【0114】
そこで、線引き処理の始点、終点は、前回または次回の線引きと重なり、2回処理されることを利用して、始点から終点の1つ前の補間点群については、フィル領域のデータと排他的論理和演算、終点については未処理とすることで、頂点を白点にすることができる。フィルラインの補間点群生成アルゴリズムは、図47にリスト形式で示すようになる。
【0115】
フィルライン処理によって図48<グラフ10>における△図形(頂点A,B,C)は以下の手順に従う。すなわち、図48(a)におけるフィルラインA−B処理で、A点に黒点、B点は未処理(白点)、フィルラインC−B処理で、C点に黒点、B点は未処理(白点)、フィルラインA−C処理で、A点は排他的論理和演算で白点、C点は未処理で黒点となる。図48(a)で示す△図形に塗り潰し処理を施すと図48(b)のようになる。
【0116】
フィルライン(塗り潰し用線引き)アルゴリズムについてまとめると以下のようになる。すなわち、2点間の座標のうち、X座標が小さい方を開始点とする。そして、xを1ステップカウントインクリメントする毎に、yをインクリメントするか否かを判断(Xスキャン線引き処理)する。始点、補間点群はフィル領域データと排他的論理和演算を実行する。終点は未処理とする。
【0117】
次に塗り潰し処理部115による塗り潰し処理(図4におけるステップS46)について説明する。図9に処理手順がフローチャートで示されている。以下、図9に示すフローチャートを参照しながら説明する。
【0118】
塗り潰し処理部115では、線引き処理部114により作成されたフィルラインの内側を塗り潰す。フィルラインの塗り潰しは、Y方向の1つ前のドットとの排他的論理和演算XORを実行(ステップ゜S461)することによりなされる。アルゴリズムを図49にリスト形式(<リスト9>)で示す。
【0119】
ストローク領域、フィル領域の重ね合わせについて説明する。ここでは、フォント外枠が描かれているストローク領域と、塗り潰しフォントが描かれているフィル領域の内容を論理和演算することによって重ね合わせる(ステップS462)。この模様は図50に動作概念図として示されている。
【0120】
最後に、線幅補正処理部116による太さ補正処理(図4におけるステップS47)について説明する。図10に処理手順がフローチャートで示されている。ここでは、線引き処理部114により作成されたビットマップは、ベクトル化によりX方向、Y方向共に1ドット分太くなってしまうことから、ビットマップをX,Y両方向にそれぞれ1ドツト分削除する機能を実行する。
【0121】
処理方法について具体的に説明する。まず、Y方向に座標をスキャン(ステップS471)し、ドット削除の条件を調べ(ステップS472)、以下に示す条件のドットを「白」にする(ステップS473)。ここで、ドット削除の条件とは、現座標ドットが「黒」、次座標ドット(=Y+1)が「白」であって、座標端のドットについては未処理とする。
【0122】
次に、X方向に座標をスキャン(ステップS472)し、ドット削除の条件を調べ(ステップS472)、以下の条件のドットを「白」にする(ステップS473)。ここで、ドット削除の条件とは、現座標ドットが「黒」、次座標ドット(=X+1)が「白」であって、座標端のドットについては未処理とする。
【0123】
太さ補正の例につき、図51に示すビットマップを参照しながら説明する。図51(a)に示すビットマップ例につき、アウトラインを抽出して拡大する。ここでは、ベクトルデータ↑VCT1=[0,0,2,2,0,0,2,2,4,4,4,4,6,6,6,6]とする。そして、X方向2倍、Y方向2倍として、線引き、塗り潰し、重ね合わせ処理を実行すると、それぞれ、図51(b)のようになってしまう。
【0124】
図51(b)は、X方向2倍、Y方向2倍に拡大して描画したときのビットマップである。X,Y方向に2倍した場合、図形の大きさは本来、4×2の8ドット分であるはずであるが、ベクトル化した場合、図のように+1ドット分太くなってしまう。ここで、+1ドットは、この例に限らず、また、拡大率の値によることなく一律である。尚、LINE{(X1,Y1)−(X2,Y2)}は、座標(X1,Y1)から座標(X2,Y2)に向けて線分を引く処理を示す。
【0125】
このため、太さ補正処理を行うが、ここではまず、Y方向に座標をスキャンし、F[x,y]=0x1(黒)、F[x,y+1]=0x0(白)の場合、F[x,y]=0x0(白)に置換する。このことにより、図51(c)に示すビットマツプが生成される。具体的に、□で表されるドットが補正される。
【0126】
続いてX方向に座標をスキャンし、F[x,y]=0x1(黒)、F[x,y+1]=0x0(白)の場合、F[x,y]=0x0(白)に置換する。このことにより、図49(d)に示すビットマツプが生成される。具体的に、◇で表されるドットが補正される。この太さ補正を行った結果、XY方向に2倍した図形の大きさは本来の4×2の8ドットになる。
【0127】
次に、太さ補正の例外処理(ステップS474)について図52に示すビットマツプを参照しながら説明する。基のビットマップデータが図52(a)に示すように、24×24ドットフォントサイズの端に接している場合について太さ補正をかけるものとする。
【0128】
X方向Y方向共に2倍として、線引き、塗り潰し、重ね合わせ処理を実行すると図52(b)に示すようなビットマップになる。線引き処理において、終点座標が拡大後のビットマップサイズを超えた座標は描画されないため、図形の大きさは、1ドット分大きくなる個所とならない個所が存在する。
【0129】
単純に太さ補正処理を行うと図52(c)に示すビットマップになる。基の図形がビットマツプサイズの端にある場合は、拡大後に1ドット分小さくなってしまう。これは線引き処理を行う際に、拡大後のビットマップサイズの座標範囲外の点を描画しないために起こる。拡大後の図形でビットマップの座標端にあるドットについて未処理とした場合、図52(d)に示すビットマップになる。図52(c)(d)において、□は補正されるドットを示す。
【0130】
【発明の効果】
以上説明のように、本発明は、フォントメモリに用意されたビットマップデータを一旦ベクトルデータに置き換え、ベクトルデータ上での平滑化により、拡大率が大きくなっても滑らかなフォントを再現するものである。このためにビットマップを8方向のベクトル(上下左右4方向と斜め4方向)で表現し、連続する6ベクトルの変化量から最適なベクトル方向を決定し、更に、6ベクトルの変化量から、ベクトルで表現しきれない1ドット単位での補正を行う。
【0131】
本発明によれば、拡大しても品質の良い印字もしくは表示が可能である他、ビットマップフォントを使用しているため圧縮が可能であり、算術符号化による圧縮アルゴリズムにより、文字サイズ等にもよるが、例えば40%程度の圧縮ができる。通常、アウトラインフォントを搭載する機器においても解像度の低い小さなサイズの文字を扱う場合、印字品位劣化のためにビットマップフォントを用いて印字することがあるが、本発明によれば、文字の大小にかかわらず同じ品質で文字の印刷が可能となり、また、メモリ容量の節約も可能となるものである。
【0132】
また、ワープロやパソコン等の印刷装置、表示装置への適用は勿論のこと、テープ印刷装置等比較的装置規模の小さい機種においても、印字品位、処理速度、価格のいずれも犠牲にすることなく、文字拡大時における滑らかなアウトラインスムージング処理が可能となる。
【図面の簡単な説明】
【図1】 本発明の実施形態を示すブロック図である。
【図2】 図1における制御部の詳細を示すブロック図である。
【図3】 本発明実施形態において使用される座標、ベクトルの定義を説明するために引用した図である。
【図4】 本発明実施形態の処理手順を説明するために引用したフローチャートである。
【図5】 図4におけるベクトルの始点検索処理の具体的な処理手順を示すフローチャートである。
【図6】 図4における直交ベクトルへの変換処理の具体的な処理手順を示すフローチャートである。
【図7】 図4における斜線ベクトルへの変換処理の具体的な処理手順を示すフローチャートである。
【図8】 図4における線引き処理の具体的な処理手順を示すフローチャートである。
【図9】 図4における塗り潰し処理の具体的な処理手順を示すフローチャートである。
【図10】 図4における線幅補正処理の具体的な処理手順を示すフローチャートである。
【図11】 始点検索決定の例をビットマップ上に展開して示した図である。
【図12】 始点ベクトル決定のための条件とベクトル値との関係を表形式(<表1>)で示した図である。
【図13】 1つ前のベクトルと検索順位との関係を表形式(<表2>)で示した図である。
【図14】 検索方向パターンと条件、ベクトルの関係を表形式(<表3>)で示した図である。
【図15】 ベクトルとベクトル化位置との関係を表形式(<表4>)で示した図である。
【図16】 直交ベクトル化の例をビットマップ上に展開して示した図である。
【図17】 ベクトル変化方向と連続する2つのベクトルとの関係を表形式(<表5>)で示した図である。
【図18】 直交ベクトルと変換された斜線ベクトルとの関係を表形式(<表6>)で示した図である。
【図19】 ベクトル変換条件を表形式(<表7>)で示した図である。
【図20】 変換条件をベクトルパターンとして表形式(<表8>)で示した図である。
【図21】 斜線化判定テーブルの内容を示した図である。
【図22】 ベクトル斜線化の例をビットマップ上に展開して示した図である。
【図23】 ベクトル値と座標移動量との関係を表形式(<表9>)で示した図である。
【図24】 ベクトル値と前回座標からの移動量、アウトライン基準座標との関係を表形式(<表10>)で示した図である。
【図25】 線引き座標を表形式(<表11>)で示した図である。
【図26】 補正データと補正方向の関係を表形式(<表12>)で示した図である。
【図27】 補正方向と座標移動量との関係を表形式(<表13>)で示した図である。
【図28】 拡大倍率と補正ドット数との関係を表形式(<表14>)で示した図である。
【図29】 ドット補正の例を表形式(<表15>)で示した図である。
【図30】 ドット補正の例を表形式(<表16>)で示した図である。
【図31】 ドット補間を説明するために例示したグラフ(<グラフ1>)である。
【図32】 補間点群演算アルゴリズムをリスト形式(<リスト1>)で示す図である。
【図33】 補間点群演算アルゴリズムをリスト形式(<リスト2>)で示す図である。
【図34】 補間点群演算アルゴリズムをリスト形式(<リスト3>)で示す図である。
【図35】 補間点群演算アルゴリズムをリスト形式(<リスト4>)で示す図である。
【図36】 ドット補間を説明するために例示したグラフ(<グラフ2>)である。
【図37】 補間点群演算アルゴリズムをリスト形式(<リスト5>)で示す図である。
【図38】 ドット補間を説明するために例示したグラフ(<グラフ3>)である。
【図39】 ドット補間を説明するために例示したグラフ(<グラフ4>)である。
【図40】 補間点群演算アルゴリズムをリスト形式(<リスト6>)で示す図である。
【図41】 ドット補間を説明するために例示したグラフ(<グラフ5>)である。
【図42】 ストロークラインの塗り潰しアルゴリズムをリスト形式(<リスト7>)で示す図である。
【図43】 ストロークラインを用いた塗り潰しを説明するために例示したグラフ(<グラフ6>)である。
【図44】 ストロークラインを用いた塗り潰しを説明するために例示したグラフ(<グラフ7>)である。
【図45】 ストロークラインを用いた塗り潰しを説明するために例示したグラフ(<グラフ8>)である。
【図46】 Xスキャン線引き処理を用いたた塗り潰しを説明するために例示したグラフ(<グラフ9>)である。
【図47】 フィルラインの補間点群発生アルゴリズムをリスト形式(<リスト8>)で示す図である。
【図48】 フィルライン処理による塗り潰しを説明するために例示したグラフ(<グラフ10>)である。
【図49】 フィルライン塗り潰しのためのアルゴリズムをリスト形式(<リスト9>)で示す図である。
【図50】 ストローク領域とフィル領域の重ね合わせをグラフ表示した動作概念図である。
【図51】 太さ補正の例をビットマップ上に展開して示した図である。
【図52】 太さ補正の例外処理をビットマップ上に展開して示した図である。
【図53】 本発明実施形態において使用されるベクトル定義の更に詳細な例を示す図である。
【符号の説明】
1…制御部、2…操作部、3…印字部、4駆動部、11CPU(フォント加工装置)、12プログラムメモリ、13ワークRAM、14文字フォントメモリ15入出力制御部(IOC)、16内部バス、20…文字出力部、111…始点検索・決定部、112…直交ベクトル抽出部、113…斜線ベクトル変換部、114…線引き処理部、115…塗り潰し処理部、116…線幅補正処理部、131…フラグメモリ(ベクトル化済み情報)、132…斜線化判定テーブル、133…補正テーブル、134…ワーク用ビットマップ領域

Claims (5)

  1. 文字フォントをドットマトリクス状のビットマップデータとして持ち、その文字フォントを印刷もしくは表示する文字出力装置で実行されるアウトラインスムージング処理方法において、
    前記ビットマップデータに対し、あらかじめ規定された条件に従いベクトルの始点となる座標を求める始点検索のための処理工程と、
    前記始点から順にドットの変化方向を調べ、上下左右4方向の直交ベクトル行列に変換すると共に、そのドットがベクトル化済みであることを示すベクトル化済み情報を更新する直交ベクトルへの変換のための処理工程と、
    前記変換された直交ベクトル行列の連続する複数のベクトルの変化量から、あらかじめ斜線化すべきパターンが定義される斜線化テーブルを参照して斜線ベクトル行列に変換する斜線ベクトルへの変換のための処理工程と、
    拡大加工されたビットマップ領域に対し、前記斜線ベクトル行列から基準となるアウトライン座標を求めると共に、前記斜線ベクトル行列の連続する複数のベクトルの変化量からあらかじめ定義される補正データを参照して前記基準となるアウトライン座標をドット単位で補正して線引きを行う線引きのための処理工程と、
    前記ベクトル化済み情報を参照して新たな始点がなくなるまで前記始点検索、直交ベクトルへの変換、斜線ベクトルへの変換、線引きのための各処理工程を繰り返し、生成された線データの内部を塗り潰す塗り潰しのための処理工程と、
    を備えて成ることを特徴とするアウトラインスムージング処理方法。
  2. 前記始点検索のための処理工程は、マトリクス座標を所定の方向に順次スキャンし、前記ベクトル化済み情報の対応するドットがセットされておらず、かつ、隣接するビットマップデータが変化するドット位置を始点検索のための条件とすることを特徴とする請求項1に記載のアウトラインスムージング処理方法。
  3. 前記直交ベクトルへの変換のための処理工程は、
    ベクトル化するドット位置を始点からベクトルの方向に移動する工程と、
    移動したドット位置の周辺ドットを調べ、ベクトル値を決定する工程と、
    次にベクトル化するドット位置をベクトル方向に移動する工程と、
    ベクトル化したドット位置が始点候補になり得る場合前記ベクトル化済み情報をセットする工程と、
    ベクトル化するドット位置が始点に戻るまで、前記ベクトル値決定、移動、ベクトル化済み情報セットのための各処理工程を繰り返す工程と、
    を更に備えて成ることを特徴とする請求項1または2に記載のアウトラインスムージング処理方法。
  4. 前記ベクトル化によって太くなった線幅を細くするための線幅補正のための処理工程を更に備えたことを特徴とする請求項1ないし3のいずれかに記載のアウトラインスムージング処理方法。
  5. 前記線幅補正のための処理工程は、座標を縦方向にスキャンし、現座標ドットが「黒」で、次座標ドットが「白」であった場合に当該現座標ドットを「白」とし、横方向に座標をスキャンし、現座標ドットが「黒」であり、次座標ドットが「白」であった場合に当該現座標ドットを「白」とし、ベクトル化により縦横両方向に1ドット分太くなったビットマップをそれぞれ1ドット分削除することを特徴とする請求項4に記載のアウトラインスムージング処理方法。
JP28721899A 1999-10-07 1999-10-07 アウトラインスムージング処理方法 Expired - Fee Related JP3791259B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP28721899A JP3791259B2 (ja) 1999-10-07 1999-10-07 アウトラインスムージング処理方法
US09/684,799 US6753862B1 (en) 1999-10-07 2000-10-06 Outline smoothing method and system
TW089120929A TW509888B (en) 1999-10-07 2000-10-06 Method and device for processing outline smoothing
KR10-2000-0059074A KR100376196B1 (ko) 1999-10-07 2000-10-07 아웃라인 스무딩 처리 방법, 장치 및 기억매체
CNB001355392A CN1160667C (zh) 1999-10-07 2000-10-07 轮廓平滑化处理方法及其装置
HK01107668A HK1036865A1 (en) 1999-10-07 2001-11-02 Processing method for outline smoothing and the device thereof.

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP28721899A JP3791259B2 (ja) 1999-10-07 1999-10-07 アウトラインスムージング処理方法

Publications (3)

Publication Number Publication Date
JP2001109455A JP2001109455A (ja) 2001-04-20
JP2001109455A5 JP2001109455A5 (ja) 2005-02-24
JP3791259B2 true JP3791259B2 (ja) 2006-06-28

Family

ID=17714582

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28721899A Expired - Fee Related JP3791259B2 (ja) 1999-10-07 1999-10-07 アウトラインスムージング処理方法

Country Status (6)

Country Link
US (1) US6753862B1 (ja)
JP (1) JP3791259B2 (ja)
KR (1) KR100376196B1 (ja)
CN (1) CN1160667C (ja)
HK (1) HK1036865A1 (ja)
TW (1) TW509888B (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007531078A (ja) * 2003-07-16 2007-11-01 ハンヤン ハク ウォン カンパニー,リミテッド 3次元メッシュ情報の符号化及び復号化方法並びにその装置
CN100377578C (zh) * 2005-08-02 2008-03-26 北京北大方正电子有限公司 一种电视字幕文字的处理方法
US7636097B1 (en) * 2006-02-15 2009-12-22 Adobe Systems Incorporated Methods and apparatus for tracing image data
US7778492B2 (en) 2006-04-04 2010-08-17 Oldford Group Limited System and method for scaling digital images
CN101221386A (zh) * 2007-01-08 2008-07-16 三星电子株式会社 成像设备及其成像方法
US8384917B2 (en) * 2010-02-15 2013-02-26 International Business Machines Corporation Font reproduction in electronic documents
CN101908216B (zh) * 2010-07-20 2014-04-30 中兴通讯股份有限公司 一种实现矢量字体的方法及装置
CN101957998B (zh) * 2010-10-09 2012-07-04 深圳市布易科技有限公司 把位图表达的图转为矢量阴影线表达的图的方法和装置
CN102637195A (zh) * 2012-02-27 2012-08-15 王涛 一种基于矢量图形播放的终端系统及其实现方法
CN107292936B (zh) * 2017-05-18 2020-08-11 湖南大学 一种汉字字体矢量化方法
CN110996026B (zh) * 2019-12-18 2022-05-24 普联技术有限公司 一种osd显示方法、装置、设备及存储介质
JP7432418B2 (ja) * 2020-03-26 2024-02-16 株式会社オーク製作所 露光装置および露光方法
CN111797843B (zh) * 2020-07-10 2022-10-11 济南中正金码科技有限公司 一种激光标刻汉字轮廓的提取方法、系统、存储介质及设备
US11915071B1 (en) * 2022-10-26 2024-02-27 Kyocera Document Solutions Inc. Caching outline characters in printed documents

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60113289A (ja) * 1983-11-25 1985-06-19 セイコーインスツルメンツ株式会社 図形表示装置用ライン・スム−ジング回路
US4777651A (en) * 1984-06-25 1988-10-11 Tektronix, Inc. Method of pixel to vector conversion in an automatic picture coding system
US5027304A (en) * 1987-10-02 1991-06-25 Telecommunication Laboratories, Directorate General of Telecommunications , Ministry of Communications Character multifont compression and restoration device
JPH0832471B2 (ja) * 1988-08-31 1996-03-29 キヤノン株式会社 出力方法
US5475807A (en) * 1988-12-19 1995-12-12 Canon Kabushiki Kaisha Character processing apparatus
JP2935510B2 (ja) * 1989-09-26 1999-08-16 キヤノン株式会社 出力装置及び出力方法
JPH03233689A (ja) * 1990-02-09 1991-10-17 Fuji Xerox Co Ltd アウトラインデータ描画装置
US5233685A (en) * 1990-06-12 1993-08-03 Wordperfect Corporation Method and apparatus for integrated graphical and textual character printing
JP2980732B2 (ja) 1991-07-05 1999-11-22 沖電気工業株式会社 アウトラインフォントの生成方法
US5301267A (en) * 1991-09-27 1994-04-05 Adobe Systems Incorporated Intelligent font rendering co-processor
US5428728A (en) * 1991-09-30 1995-06-27 Destiny Technology Corporation Method and apparatus for outline font character generation in dot matrix devices
JP2990671B2 (ja) 1992-05-30 1999-12-13 京セラ株式会社 画像平滑化処理方式
JP2959612B2 (ja) 1994-02-14 1999-10-06 キヤノン株式会社 ドットパターンからのベクトル座標発生方法及び装置
US5600772A (en) * 1994-08-17 1997-02-04 Printronix, Inc. Bit map character convertor using chain-codes for the character filling process
US6226400B1 (en) * 1998-06-24 2001-05-01 Colorcom, Ltd. Defining color borders in a raster image by identifying and breaking contrast ties
KR100361387B1 (ko) * 1999-01-06 2002-11-21 마츠시타 덴끼 산교 가부시키가이샤 다각형 묘화 방법, 및 다각형 묘화 장치

Also Published As

Publication number Publication date
HK1036865A1 (en) 2002-01-18
KR100376196B1 (ko) 2003-03-15
JP2001109455A (ja) 2001-04-20
US6753862B1 (en) 2004-06-22
CN1160667C (zh) 2004-08-04
CN1295309A (zh) 2001-05-16
TW509888B (en) 2002-11-11
KR20010050918A (ko) 2001-06-25

Similar Documents

Publication Publication Date Title
JP3791259B2 (ja) アウトラインスムージング処理方法
JPH03208094A (ja) 種々の寸法の記号映像のアウトラインを処理する方法およびコンピュータ表示装置
US5524198A (en) Character or graphic processing method and apparatus
JP3142550B2 (ja) 図形処理装置
JP4370438B2 (ja) ベクター画像描画装置、ベクター画像描画方法およびプログラム
US7948494B2 (en) Character rendering device, display device, and printer
US5537131A (en) Character generating method and apparatus
JP4625269B2 (ja) 文字画像生成装置,文字画像生成方法,表示制御装置,文字画像生成プログラムおよび表示制御プログラム
JP3037854B2 (ja) 文字生成方法及びその装置
KR100302163B1 (ko) 문자 생성 방법 및 장치
JP3416489B2 (ja) フォント処理装置およびフォント処理用プログラムを記録した記録媒体
JP2007122188A (ja) 画像形成装置及び画像処理方法、並びにプログラム
JP3034140B2 (ja) 文字生成方法及びその装置
JP4325812B2 (ja) ベクター画像描画回路およびベクター画像描画方法
JP2000066658A (ja) 画像処理装置および記録媒体
JPH10151815A (ja) 印刷処理装置
JP2806790B2 (ja) 文字発生装置およびその方法
JP2637921B2 (ja) 文字記号発生装置
JP3294249B2 (ja) 画像処理装置
JP2700124B2 (ja) 図形表示方法及びその実施装置
JP2013091222A (ja) 画像形成処理装置及び画像処理方法
JPH11224331A (ja) ラスタ画像生成装置およびラスタ画像生成方法
JPH09138679A (ja) データ処理装置
JPH0793564A (ja) 情報抽出マスク生成方法
JPH1145343A (ja) 多角形図形描画装置

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040317

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040317

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050314

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050506

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050630

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060314

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060327

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090414

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100414

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110414

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110414

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120414

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130414

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130414

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140414

Year of fee payment: 8

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees