JP3238580B2 - 太め細め文字生成装置 - Google Patents

太め細め文字生成装置

Info

Publication number
JP3238580B2
JP3238580B2 JP22007994A JP22007994A JP3238580B2 JP 3238580 B2 JP3238580 B2 JP 3238580B2 JP 22007994 A JP22007994 A JP 22007994A JP 22007994 A JP22007994 A JP 22007994A JP 3238580 B2 JP3238580 B2 JP 3238580B2
Authority
JP
Japan
Prior art keywords
point
contour
character
data
loop
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 - Lifetime
Application number
JP22007994A
Other languages
English (en)
Other versions
JPH0883060A (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.)
Sharp Corp
Original Assignee
Sharp 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 Sharp Corp filed Critical Sharp Corp
Priority to JP22007994A priority Critical patent/JP3238580B2/ja
Priority to US08/463,258 priority patent/US5867172A/en
Publication of JPH0883060A publication Critical patent/JPH0883060A/ja
Application granted granted Critical
Publication of JP3238580B2 publication Critical patent/JP3238580B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • 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/246Generation of individual character patterns of ideographic or arabic-like characters
    • 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
    • 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/26Generation of individual character patterns for modifying the character dimensions, e.g. double width, double height
    • 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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、太め細め文字生成装置
に関し、より詳細には、ワードプロセッサやコンピュー
タシステムなどに搭載されるアウトラインフォントの異
なった太さの文字生成装置に関する。
【0002】
【従来の技術】従来の太め細め文字生成装置について記
載した公知文献としては、例えば、特開昭59−210
482号公報がある。この公報のものは、種々の大きさ
の文字パターンを効率良く発生するために、文字パター
ンをそのストロークの複数の代表点の位置情報および前
記各代表点におけるストロークの太さ情報として表現し
て記憶装置に記憶しておき、前記各代表点の位置情報か
ら代表点間のストロークデータを求めると共に、前記代
表点の太さ情報によって前記ストロークによって示され
る文字パターンの輪郭線データを求めるようにしたもの
である。
【0003】また、特開昭61−143792号公報の
ものは、文字パターン・ストロークの代表点位置情報、
該代表点における標準のストローク太さ情報、最大のス
トローク太さ情報とを記憶した記憶装置と、該記憶装置
から読出された前記代表点の位置情報から各代表点を結
ぶストロークのデータを求めると共に、前記代表点の標
準及び最大の太さ情報から上記ストロークによって示さ
れる文字パターンの輪郭線データを求める手段とを具備
したものである。
【0004】また、特開昭64−590号公報のもの
は、造形選択や文字選択のための文字信号と文字造形選
択のための助変数を入力するのみで、メモリの中にため
ている文字や符号や図形などを、コンピュータの働きに
よって、コードメモリのコードや特殊信号メモリの特長
符号用記号からベクトル信号を発生するまでの内部操作
を介して任意に拡大したり縮小したり、または痩させた
り太らせたり、上下方向に伸ばしたり縮めたりして字形
信号に転換することができるようにしたものである。
【0005】また、特開平4−136898号公報のも
のは、アウトラインデータからストロークの線幅を変更
した文字や輪郭形状を部分ごとに変形した文字を発生す
るディジタルベクターフォントの変形を行うもので、文
字の輪郭線を直線/曲線近似したデータに、その各近似
直線/曲線の状況に応じた属性を付加する属性付加手段
と、前記属性付加手段によって付加された属性を利用し
てストロークの線幅の変更や、輪郭形状を部分的に変え
る変形を行う変形手段とを備えたものである。
【0006】さらに、特開平4−24689号公報のも
のは、文字または図形の形状を示す輪郭情報を記憶し、
輪郭を変形する場合、読み出し手段が記憶手段から変形
対象の輪郭情報を読み出し、変形手段が読み出された輪
郭情報を変形内容に応じて変形し、補正手段が変形され
た輪郭情報に基づいて変形内容に応じた補正を行ない、
出力手段が補正された輪郭情報を出力するものである。
【0007】
【発明が解決しようとする課題】前述のように、従来の
太め細め文字生成装置においては、いずれも、文字の輪
郭を構成している点、直線、曲線や、文字を構成してい
るストロークの骨格などに属性などの情報を付加し、該
情報をもとに文字を太めたり細めたりしているのでデー
タ量が多くなってしまうという欠点があった。更には、
太めあるいは細め処理結果、隣り合う輪郭線の交点の位
置が、元の輪郭線の交点位置と交差してしまい、新たに
生成された輪郭線にループ状態が発生するような場合に
おいては、正しく太めあるいは細め処理がなされず、違
和感がある文字が生成されてしまう欠点を有していた。
【0008】本発明は、このような実情に鑑みてなされ
たもので、属性などの情報を付加せずに太めまたは細め
文字を生成し、かつ、新たに生成された輪郭線にループ
状態が生じて、生成された該輪郭線に不具合な部分が発
生した場合に、不具合な部分を構成している点列を移
動して、不具合な部分のない輪郭線にすることにより、
きれいな太めまたは細め文字を生成するようにした太め
細め文字生成装置を提供することを目的としている。
【0009】
【課題を解決するための手段】本発明は、上記課題を解
決するために、(1)アウトラインフォントを構成して
いる点列に所定の太めあるいは細め処理を行なうための
太め細め手段と、該太め細め手段により、太めあるいは
細め処理が行なわれたアウトラインフォントの輪郭
に、ループ部分が存在するかどうかを調べるループ検出
手段と、該ループ検出手段によって得られたデータをも
とに、前記ループ部分を構成している前記輪郭線の点列
を移動する移動先を求める関数、または該関数によって
あらかじめ前記移動先を求めたテーブルから前記点列を
移動する点列移動手段と、該点列移動手段により移動さ
れた点列を含む全点列をアウトラインフォントデータと
して出力するための出力手段とを有すること、更には、
)前記()において、前記点列移動手段は、前記
ループ部分の始点を形成した隣り合う輪郭線のうち、前
位にある前位輪郭線を示す第1の関数と、前記ループ部
分の終点を形成した隣り合う輪郭線のうち、後位にある
後位輪郭線を示す第2の関数との二つの連立方程式を解
き、該二つの連立方程式の解である前記前位輪郭線と前
記後位輪郭線との交点を、前記ループ部分を構成してい
る前記点列すべての移動先とすること、を特徴としたも
のである。
【0010】
【作用】前記構成を有する本発明の太め細め文字生成装
置は、アウトラインフォントを構成している点列を移動
し、太め細め文字を生成する太め細め手段と、太めある
いは細め処理が行なわれたアウトラインフォントの輪郭
上の不具合な部分の点列を移動する移動先を、関数ま
たはテーブルを用いて求め、前記点列の前記移動先に前
記輪郭線上の前記点列を移動する点列移動手段と、移動
された点列を含む全点列をアウトラインフォントデータ
として出力するための出力手段とを有するので、アウト
ラインフォントの輪郭線に、太めまたは細め処理によっ
て不具合な点が発生した場合に、不具合な部分を構成し
ている点列を移動して、不具合な点のない輪郭線データ
にして出力することにより、違和感がなく、文字品質の
劣化を防ぐことができる。
【0011】
【実施例】実施例について、図面を参照して以下に説明
する。まず、本発明の実施例1について説明する。図1
は、本発明による太め細め文字の生成装置の一実施例
(実施例1)を説明するための構成図で、図中、11は
入力部、12はフォントデータ記憶部、13は出力部、
14はRAM(Random Access Memory)、15はC
PU(中央処理装置)、16は太め細め処理部、17は
ループ検出部、18は点列移動部である。
【0012】入力部11からの文字コードをもとに、フ
ォントデータ記憶部12からRAM14に1文字分のア
ウトラインフォントデータを読み込む。例えば、フォン
トデータ記憶部12には、フォントデータが1文字単位
に文字コード順に記憶されており、各文字のデータの先
頭番地もテーブルとして記憶している。CPU15は、
前記入力部11から与えられた文字コードをもとに、前
記テーブルを参照して各文字のデータの記憶場所の先頭
番地を求め、該番地からのデータをRAM14に転送す
る。
【0013】太め細め処理部16は、アウトラインフォ
ントを構成している点列に所定の太めあるいは細め処理
を行なうためのものである。点列移動部18は、前記太
めあるいは細め処理が行なわれたアウトラインフォント
の輪郭上の不具合な点列を移動する先を、関数またはテ
ーブルを用いて求め、前記点列の移動先に前記輪郭線上
の点列を移動する。出力部13は、前記移動された点列
を含む全点列をアウトラインフォントデータとして出力
する。
【0014】また、ループ検出部17は、前記太めある
いは細め処理が行なわれたアウトラインフォントの輪郭
に、ループ部分が存在するかどうかをループ検出手段に
よって調べる。また、前記点列移動部18は、前記ルー
プ検出手段によって得られたデータをもとに、ループ部
分を構成している点列を移動する先を求める関数、また
は該関数によってあらかじめ移動先を求めたテーブルか
ら前記点列を移動する。さらに、前記点列移動部18
は、ループ部分の始点と、該始点の隣のループ外側の点
を結ぶ直線あるいは曲線の関数fと、ループ部分の終点
と、該終点の隣のループ外側の点を結ぶ直線あるいは曲
線の関数gの連立方程式を解き、その交点をループ部分
の点列すべての移動先とする。
【0015】図2及び図3は、本発明による太め細め文
字生成装置の動作を説明するためのフローチャートであ
る。図2におけるステップS1〜ステップS8は太め細
め処理のフローチャートで、図3におけるステップS
9,S10はループ処理の部分である。以下、各ステッ
プ(S)に従って順に説明する。
【0016】まず、ステップS1で、図1の入力部11
からの文字コードをもとに、フォントデータ記憶部12
からRAM14に、1文字分のアウトラインフォントデ
ータを読み込む。例えば、フォントデータ記憶部12に
は、1文字単位に文字コード順に記憶されており、各文
字のデータの先頭番地もテーブルとして記憶している。
CPU15は、前記入力部11から与えられた文字コー
ドをもとに、前記テーブルを参照して各文字のデータの
記憶場所の先頭番地を求め、該番地からのデータをRA
M14に転送する。各文字は、各文字が何本の輪郭線か
らできており、各輪郭線が何個の点からできているのか
をデータ内に持っているので、1文字のデータの終わり
が分かる。
【0017】読み込んだデータは、例えば、図4の文字
「他」の●印のように文字の輪郭を構成する点列が順に
(図では時計回りに)並んでいる。ここでは、この文字
の輪郭線の数は5本で、各輪郭線を構成している点を順
に、P1,1〜P1,12,P2,1〜P2,11,P3,1〜P3,21
4,1〜P4,10,P5,1〜P5,21とする。RAM34に読
み込んだこのデータは、例えば、図5のようになってい
る。図5における21は読み込んだアウトラインデータ
の点であり、22は21の各点に対応した座標値を表し
ており、図4における点と対応している。
【0018】次に、ステップS2で、輪郭線の本数をN
に、i(1≦i≦N)番めの輪郭線を構成している点の
数をQ[i]にとっておく。例えば、図4で、N=5,
Q[1]=12,Q[2]=11,Q[3]=21,Q
[4]=10,Q[5]=21である。次に、ステップ
S3で、輪郭線を区別する変数iに初期値0を代入して
おく。次に、ステップ4で、i番めの輪郭線を構成して
いる点を区別する変数jに初期値0を代入しておく。次
に、ステップS5で、変数iを1つ進める。次に、ステ
ップS6で、変数jを1つ進める。
【0019】次に、ステップS7で、図1のRAM14
から太め細め処理部16にデータを転送し、太めまたは
細め処理を行なう。ここで、各点Pi,jに太めまたは細
め処理を行った処理後の点を点P′i,jとする。例え
ば、CPU15は、図1のRAM14から3点
i,j-1、Pi,j、Pi,j+1を太め細め処理部16に転送
し、2点Pi,j-1、Pi,jを通る直線と、2点Pi,j、P
i,j+1を通る直線をそれぞれ平行移動し、その交点を太
めまたは細め処理後の点をP′i,jとする。このとき、
j=0の時にはPi,j-1でなくPi,Q[i]を用い、j=Q
[i]の時にはPi,j+1でなくPi,0を用いる。そして、
この点を太め細め処理部16内に保持しておく。
【0020】次に、ステップS8は、jとQ[i]を比
較し、i番めの輪郭線上の点をすべて処理したかどうか
を調べる。j<Q[i]なら、まだ太めまたは細め処理
していない点が残っているので、ステップS6から繰り
返す。そうでないなら、i番目の輪郭線上の点はすべて
太めまたは細め処理したことになるので、このi番めの
太め細め処理部16内に保持しておいた太めまたは細め
処理後、データをRAM14へ転送し、ステップS9へ
移る。
【0021】ここまでで輪郭線毎に太めまたは細め処理
が行なわれる。図4の文字を太め処理とすると、点P
3,13〜P3,15や点P5,6〜P5,8などで図6(a),
(b)のようなループが発生し、また細め処理を行なう
と、点P2,10〜P2,11や点P5,11〜P5,12などで図7
(a),(b)のようなループが発生することがある。
すなわち、図5のデータは、各輪郭線毎に図8のような
データになる。図8における31は太めまたは細め処理
を行なった後の点であり、図5における21と対応して
いる。また、32は各点の太め処理後の座標値を表して
おり、33は各点の細め処理後の座標値を表しており、
31に対応して記載されている。
【0022】ここで、ループが発生する原理について説
明する。輪郭線を構成している点Pi,jを太めまたは細
め処理した点P′i,jを求める場合、図9に示すよう
に、以下のような方法で行う。点Pi,jとその1つ前の
点Pi,j-1を結ぶ直線LをW(W>0:太め時、W<
0:細め時)だけ平行移動し、直線L′を求める。平行
移動する方向は、点Pi,j-1から点Pi,jに向かうベクト
ルを反時計回りに90度回転した方向である。
【0023】また、点Pi,jとその1つ次の点Pi,j+1
結ぶ直線MをW(W>0:太め時、W<0:細め時)だ
け平行移動し、直線M′を求める。平行移動する方向
は、点Pi,jから点Pi,j+1に向かうベクトルを反時計回
りに90度回転した方向である。次に、直線L′とM′
の交点を太め細め処理後の点P′i,jとする。この処理
をすべての輪郭線のすべての点について行い、太めまた
は細め処理が終了する。この時、図10の点a,bのよ
うに平行移動量Wが隣り合う2点間の距離より十分大き
い場合、図10の点a′,b′のようにループを作って
しまうことがある。即ち、元の文字における隣り合う輪
郭線L,Mのうち、前位にある前位輪郭線Lと後位にあ
る後位輪郭線Mとの交点aと、隣り合う輪郭部M,Nの
うち、前位にある前位輪郭線Mと後位にある後位輪郭線
Nとの交点bそれぞれの交点の位置関係が、太めまたは
細め処理結果として、新たに形成された隣り合う輪郭線
L´,M´のうち、前位にある前位輪郭線L´と後位に
ある後位輪郭線M´との交点a´と、隣り合う輪郭部M
´,N´のうち、前位にある前位輪郭線M´と後位にあ
る後位輪郭線N´との交点b´それぞれの交点の位置関
係と交差してしまう結果、新たな輪郭線は、輪郭線L´
→交点a´→輪郭線M´→交点b´→輪郭線N´と経由
することになり、交点a´をループ部分の始点とし、交
点b´をループ部分の終点として、新たに形成された輪
郭線がループ状態となってしまう場合がある。 かかるル
ープ状態の発生結果、交点a´,b´が元の交点a,b
と交差した状態にある輪郭線M´(ループ部分)に関す
る処理に不都合が生じ、違和感を伴う文字を生成して、
文字品質の劣化が生じてしまうこととなりかねない。
って、ループ部分の始点a´を形成している前位輪郭線
L´とループ部分の終点b´を形成している後位輪郭線
N´との交点を新たな隣り合う輪郭線L´,N´の交点
とすることにより、ループ状態の発生を回避することと
する。即ち、
【0024】このループを回避するため、以下の処理に
移る。次に、ステップS9で、前記ステップS8で太め
または細め処理をされたi番めの輪郭線のデータをRA
M14からループ検出部17に転送し、該輪郭線データ
に対してループが存在するかどうかを調べる。存在する
ならば、後述する交点Xを求め、ステップS10へ移
り、存在しないならば、ステップS11へ移る。なお、
ループの存在を調べる方法は種々考えられるが、実施例
1での方法は、図11を用いて後述する。
【0025】次に、ステップS10で、図1のループ検
出部17から点列移動部18にi番めの輪郭線データ
と、ステップS9(ステップS9-10)で求めた点Xの
座標を転送し、ステップS9(ステップS9-9)で求め
た各輪郭のループ内の点Pi,s〜Pi,tをすべて点Xの座
標に置き換えて移動する。そして、前記輪郭線データを
RAM14に転送する。
【0026】点P′i,jのループ修正後の点を点P″i,j
とする。例えば、図6で点P3,13〜P3,15、点P5,6
5,8、図7で点P2,10〜P2,11、点P5,11〜P5,12
それぞれ点Xに移動すると、図12(a),(b)、図
13(a),(b)のようになり、ループがなくなる。
すなわち、図8のデータは図14のようなデータにな
る。図14における41はループしていた部分の点列を
移動した後の点であり、図5における21及び図8にお
ける31と対応している。また、42は、各点の太め処
理後にループ回避修正を行なった座標値を表しており、
43は、各点の細め処理後にループ回避修正を行なった
座標値を表しており、41に対応して記載されている。
【0027】次に、ステップS11は、iとNを比較
し、文字内のN本の輪郭線すべてについて処理したかど
うかを調べる。i<Nならまだ処理していない輪郭線が
残っているので、ステップS4から繰り返す。そうでな
いならば、N本の輪郭線をすべて処理したことになるの
で、ステップS12へ移る。次に、ステップS12は、
図1のRAM14から太めまたは細め処理後の1文字分
のデータを出力部13に転送する。該出力部13では、
前記データを所定の文字の大きさのデータに変換し、輪
郭毎に各点を順に直線または曲線で結ぶ。これでこの文
字の輪郭ができるので、輪郭内のドットパターンで埋め
てラスタデータに変換し、該ラスタデータを表示部や印
刷部などに出力して終了する。
【0028】図11は、図3におけるステップS9での
ループ部分を検出する処理のフローチャートである。以
下、各ステップ(S)に従って順に説明する。まず、ス
テップS9-1で、i番めの輪郭線を構成している点を区
別する変数jに初期値0を代入しておく。次に、ステッ
プS9-2で、変数jを1つ進める。次に、ステップS9
-3で、同じくi番めの輪郭線を構成している点を区別す
る変数kに初期値0を入れておく。次に、ステップS9
-4で、変数kを1つ進める。
【0029】次に、ステップS9-5で、kとQ[i]を
比較し、i番めの輪郭線上の点をすべて処理したかどう
かを調べる。k<Q[i]ならまだ処理していない点が
残っているので、ステップS9-2から繰り返す。そうで
ないならば、i番目の輪郭線上の点はすべて処理したこ
とになるので、ステップS9-6へ移る。次に、ステップ
S9-6で、jとQ[i]を比較し、i番めの輪郭線上の
点をすべて処理したかどうかを調べる。j<Q[i]な
らば、まだ処理していない点が残っているので、ステッ
プS11から繰り返す。そうでないならば、i番目の輪
郭線上の点はすべて処理したことになるので、ステップ
S9-7へ移る。
【0030】次に、ステップS9-7で、ステップS9-8
での処理の邪魔にならないように、j≠kの場合のみス
テップS9-8へ移り、j=kの場合にはステップS9-4
から繰り返す。次に、ステップS9-8で、点P′i,j
P′i,j+1をつなぐ直線または曲線の関数をfとし、点
P′i,kとP′i,k+1をつなぐ直線または曲線の関数をg
とし、関数fと関数gが互いに点P′i,jとP′i,j+1
間で、かつ点P′i,kとP′i,k+1の間に交点があるかど
うかを調べる。交点があるならば、ここでループが存在
したことになり、ステップS9-9へ移る。交点が存在し
ないならば、ステップS9-4から繰り返す。
【0031】例えば、図6(a)での場合を図15で説
明する。この場合は、i=3で、j=12、k=15の
時、点P′3,12とP′3,13をつなぐ直線または曲線の関
数がf、点P′3,15とP′3,16をつなぐ直線または曲線
の関数がgとなり、関数fと関数gの交点は点P′3,12
とP′3,13の間で、かつ点P′3,15とP′3,16の間にな
るのでループが存在したことになる。次に、ステップS
9-9で、交点が存在する時の輪郭内の番号j+1を変数
sに、kの値を変数tにとっておく。前記ステップS1
0では、この変数sからtまでの点を移動する。例え
ば、図6(a)の例では、変数sに13を代入、tに1
5を代入する。この変数sからtまでの範囲の点がルー
プ内の点となる。
【0032】次に、ステップS9-10で、ステップS9-
8で求めた交点を点Xとする。前記ステップS10で
は、この点Xにループ内の点を移動する。これでループ
部分を検出する処理は終り、次のステップS10へ移
る。このようにして、点P1,1〜P1,12、点P2,1〜P
2,11、点P3,1〜P3,21点P4,1〜P4,10、点P5,1
5,21の各点について処理を行ない、太め処理を行なった
ものを図16に示し、細め処理を行なったものを図17
に示す。以上説明したように、本実施例によれば、太め
または細め処理後の輪郭線にループが発生した場合に、
ループのない輪郭データを生成することができる。
【0033】次に、実施例2について説明する。前述し
た記実施例1は、ループ部分を構成している点列を移動
する先の点を求めるために、まず関数fと関数gを求
め、さらにその交点を求めて移動している。しかし、あ
らかじめ移動先を求めてテーブル化しておき、該テーブ
ルを参照してループ部分を構成している点列の移動先を
求める方法もある。以下、この方法について説明する。
【0034】まず、前記実施例1の方法により太め細め
処理し、ループ部分の点列を修正した座標値を求めてお
く。そして、図18に示すように、この修正のあった点
のみ座標値をテーブル化しておく。図18における51
は読み込んだアウトラインデータの輪郭番号(i)、輪
郭内の点番号(j)であり、図5における21と対応し
ている。52は太め処理の後の修正テーブルであり、フ
ラグは修正内容がある場合の「1」か、ない場合の
「0」かを示しており、修正内容があれば、X,Y座標
に移動する座標値までの相対座標値がいれてある。53
は52と同様に細め処理後の修正テーブルである。そし
て太め細め処理が行われた後、関数ではなく、前記テー
ブルからループの修正後の座標値を求める。もちろん相
対座標値でなく、直接移動先の座標値をいれておいても
よい。
【0035】図19は、本発明による太め細め文字生成
装置の他の実施例(実施例2)を説明するための構成図
で、図中、61は入力部、62はフォントデータ記憶
部、63は出力部、64はRAM、65はCPU、66
は太め細め処理部、67は修正データ記憶部、68は点
移動部である。
【0036】入力部61からの文字コードをもとに、フ
ォントデータ記憶部62からRAM64に1文字分のア
ウトラインフォントデータを読み込む。例えば、フォン
トデータ記憶部62には、フォントデータが1文字単位
に文字コード順に記憶されており、各文字のデータの先
頭番地もテーブルとして記憶している。CPU65は、
前記入力部61から与えられた文字コードをもとに、前
記テーブルを参照して各文字のデータの記憶場所の先頭
番地を求め、該番地からのデータをRAM64に転送す
る。
【0037】太め細め処理部66は、アウトラインフォ
ントを構成している点列に所定の太めあるは細め処理を
行なうためのものである。修正データ記憶部67には修
正テーブルが記憶されている。該修正テーブルは、1文
字単位に文字コード順に記憶されており、各文字の修正
データの先頭番地もテーブルとして記憶されている。ま
た、輪郭番号と輪郭内の点の番号、その点を移動するデ
ータをもっている。点移動部68は、移動データが移動
先の座標値であれば、太めまたは細め処理された座標値
をこの座標値に置き換え、移動先までの相対座標値であ
れば、太めまたは細め処理された座標値にこの座標値を
加える。こうして太め細め処理された点を移動する。そ
して移動した点の座標値をRAM64に転送する。出力
部63は、前記移動された点を含む全点をアウトライン
フォントデータとして出力する。
【0038】図20及び図21は、図19に示す実施例
の動作を説明するためのフローチャートである。以下、
各ステップ(S)に従って順に説明する。まず、ステッ
プS21で、入力部61からの文字コードをもとに、フ
ォントデータ記憶部62からRAM64に、1文字分の
アウトラインフォントデータを読み込む。例えば、フォ
ントデータ記憶部62は1文字単位に文字コード順に記
憶されており、各文字のデータの先頭番地もテーブルと
して記憶している。CPU65は、入力部61から与え
られた文字コードをもとに、このテーブルを参照して各
文字のデータの記憶場所の先頭番地を求め、この番地か
らのデータをRAM64に転送する。各文字は、各文字
が何本の輪郭線からできており、各輪郭線が何個の点か
らできているのかをデータ内に持っているので、1文字
のデータの終わりが分かる。
【0039】読み込んだデータは、たとえば、図4の文
字「他」の●印のように文字の輪郭を構成する点列が順
に(図では時計回りに)並んでいる。ここでは、この文
字の輪郭線の数は5本で、各輪郭線を構成している点を
順に、P1,1〜P1,12、P2,1〜P2,11、P3,1
3,21、P4,1〜P4,10、P5,1〜P5,21とする。RAM
64に読み込んだこのデータは、例えば、図5のように
なっている。図5における21は読み込んだアウトライ
ンデータの点であり、22は21の各点に対応した座標
値を表しており、図4での点と対応している。
【0040】次に、ステップS22で、輪郭線の本数を
Nに、i(1≦i≦N)番めの輪郭線を構成している点
の数をQ[i]にとっておく。例えば、図4で、N=
5、Q[1]=12、Q[2]=11、Q[3]=2
1、Q[4]=10、Q[5]=21である。次に、ス
テップS23で、輪郭線を区別する変数iに初期値0を
代入しておく。次に、ステップS24で、i番めの輪郭
線を構成している点を区別する変数jに初期値0を代入
しておく。次に、ステップS25で、変数iを1つ進め
る。次に、ステップS26で、変数jを1つ進める。
【0041】次に、ステップS27で、RAM64から
太め細め処理部66にデータを転送し、太めまたは細め
処理を行なう。ここで、各点Pi,jに太めまたは細め処
理を行った処理後の点を点P′i,jとする。例えば、C
PU65は、RAM64から3点Pi,j-1、Pi,j、P
i,j+1を太め細め処理部66に転送し、2点Pi,j-1、P
i,jを通る直線と、2点Pi,j、Pi,j+1を通る直線をそ
れぞれ平行移動し、その交点を太めまたは細め処理後の
点P′i,jとする。このとき、j=0の時にはPi,j-1
なくPi,Q[i]を用い、j=Q[i]の時にはPi,j+1
なくPi,0を用いる。ここまでは実施例1と同じであ
る。したがって、ループが発生している部分がある。
【0042】次に、ステップS28で、図19の修正デ
ータ記憶部67に記憶されている修正テーブルに、点
P′i,jの修正データが存在するかどうかを調べる。例
えば、前記修正テーブルは図18に示すように、1文字
単位に文字コード順に記憶されており、各文字の修正デ
ータの先頭番地もテーブルとして記憶している。修正デ
ータが存在しなければフラグに0が入っており、存在す
れば1が入っているのでこれで判断できる。存在すれば
ステップS29に移り、存在しなければステップS30
に移る。
【0043】次に、ステップS29で、点P′i,jの修
正データを読み出し、点P′i,jを移動して修正する。
例えば、修正テーブルは図18に示すように、輪郭番号
と輪郭内の点の番号、その点を移動するデータをもって
いる。該移動データは、移動先の座標値でも、移動先ま
での相対座標値でも、どちらかに統一しておけばよい。
CPU65は、入力部61から与えられた文字コードと
輪郭番号iと輪郭内の点の番号jをもとに、移動データ
を読み出し、点移動部68に転送する。また、ステップ
S27で太めまたは細め処理されたデータも点移動部6
8に転送する。
【0044】該点移動部68では、移動データが移動先
の座標値であれば、太めまたは細め処理された座標値を
この座標値に置き換え、移動先までの相対座標値であれ
ば、太めまたは細め処理された座標値にこの座標値を加
える。こうして太め細め処理された点を移動する。そし
て移動した点の座標値をRAM64に転送する。
【0045】次に、ステップS30は、jとQ[i]を
比較し、i番めの輪郭線上の点をすべて処理したかどう
かを調べる。j<Q[i]ならまだ太めまたは細め処理
していない点が残っているので、ステップS26から繰
り返す。そうでないならi番目の輪郭線上の点はすべて
処理したことになるので、ステップS31へ移る。次
に、ステップS31は、iとNを比較し、N本の輪郭線
すべてについて処理したか調べる。文字内の輪郭線をす
べて処理したか調べる。i<Nならまだ処理していない
輪郭線が残っているので、ステップS24から繰り返
す。そうでないならN本の輪郭線をすべて処理したこと
になるので、ステップS32へ移る。このようにして、
太め処理を行なったものは実施例1における図16と同
じになり、細め処理を行なったものは実施例1における
図17と同じになる。
【0046】次に、実施例3について説明する。ループ
内の点を移動する先として、前述した実施例1では関数
fと関数gの交点とし、実施例2では関数fと関数gの
交点を修正データとしてテーブル化したものを用いた。
どちらも交点を用いているが、交点にしないで、ループ
部分の前後数点の並びや輪郭形状によって移動先を決め
る方法もある。以下、この方法について関数を用いて移
動先を求める方法を説明する。ここでは実施例1で例に
挙げた図7(b)のループのみ、ループ部分の点列を交
点に集めるのではなく、ループ部分の点列の中点に集め
る例について説明する。また、実施例1をテーブル化し
た実施例2と同様に、これも移動先をテーブル化してお
き、該テーブルから移動先を求めることもできるが、こ
れについては述べるまでもないので省略する。
【0047】図22及び図23は、実施例3の処理全体
を説明するフローチャートである。以下、各ステップ
(S)に従って順に説明する。なお、ブロック図と文字
形状を説明する図の一部は実施例1と同じであるので、
図1に示すブロック図を用いて説明する。まず、ステッ
プS41で、図1の入力部11からの文字コードをもと
に、フォントデータ記憶部12からRAM14に、1文
字分のアウトラインフォントデータを読み込む。例え
ば、フォントデータ記憶部12は1文字単位に文字コー
ド順に記憶されており、各文字のデータの先頭番地もテ
ーブルとして記憶している。CPU15は、入力部11
から与すられた文字コードをもとに、このテーブルを参
照して各文字のデータの記憶場所の先頭番地を求め、こ
の番地からのデータをRAM14に転送する。各文字
は、各文字が何本の輪郭線からできており、各輪郭線が
何個の点からできているのかをデータ内に持っているの
で、1文字のデータの終わりが分かる。
【0048】読み込んだデータは、たとえば、図4の文
字「他」の●印のように文字の輪郭を構成する点列が順
に(図では時計回りに)並んでいる。ここでは、この文
字の輪郭線の数は5本で、各輪郭線を構成している点を
順に、P1,1〜P1,12、P2,1〜P2,11、P3,1
3,21、P4,1〜P4,10、P5,1〜P5,21とする。RAM
14に読み込んだこのデータは、例えば、図5のように
なっている。図5における21は読み込んだアウトライ
ンデータの点であり、22は21の各点に対応した座標
値を表しており、図4での点と対応している。
【0049】次に、ステップS42で、輪郭線の本数を
Nに、i(1≦i≦N)番めの輪郭線を構成している点
の数をQ[i]にとっておく。例えば、図4で、N=
5、Q[1]=12、Q[2]=11、Q[3]=2
1、Q[4]=10、Q[5]=21である。次に、ス
テップS43で、輪郭線を区別する変数iに初期値0を
代入しておく。 次に、ステップS44で、i番めの輪
郭線を構成している点を区別する変数jに初期値0を代
入しておく。次に、ステップS45で、変数iを1つ進
める。次に、ステップS46で、変数jを1つ進める。
【0050】次に、ステップS47で、図1のRAM1
4から太め細め処理部16にデータを転送し、太めまた
は細め処理を行なう。ここで、各点Pi,jに太めまたは
細め処理を行った処理後の点を点P′i,jとする。例え
ば、CPU15は図1のRAM14から3点Pi,j-1
i,j、Pi,j+1を太め細め処理部16に転送し、2点P
i,j-1、Pi,jを通る直線と、2点Pi,j、Pi,j+1を通る
直線をそれぞれ平行移動し、その交点を太めまたは細め
処理後の点P′i,jとする。このとき、j=0の時には
i,j-1でなくPi,Q[i]を、j=Q[i]の時にはP
i,j+1でなくPi,0を用いる。そして、この点を太め細め
処理部16内に保持しておく。
【0051】次に、ステップS48は、jとQ[i]を
比較し、i番めの輪郭線上の点をすべて処理したかどう
かを調べる。j<Q[i]ならまだ太めまたは細め処理
していない点が残っているので、ステップS46から繰
り返す。そうでないならi番目の輪郭線上の点はすべて
太めまたは細め処理したことになるので、このi番めの
太め細め処理部16内に保持しておいた太めまたは細め
処理後データをRAM14へ転送し、ステップS49へ
移る。
【0052】ここまでで輪郭線毎に太めまたは細め処理
が行なわれる。図4の文字を太め処理とすると、点P
3,13〜P3,15や点P5,6〜P5,8などで図6(a),
(b)のようなループが発生し、細め処理を行なうと点
2,10〜P2,11や点P5,11〜P5,12などで図7(a),
(b)のようなループが発生することがある。すなわ
ち、図5に示すデータは、図8のようになる。ここまで
は実施例1と同じである。
【0053】このループを回避するため、以下の処理に
移る。次に、ステップS49で、前記ステップS48で
太めまたは細め処理をされたi番めの輪郭線のデータを
RAM14からループ検出部17に転送し、この輪郭線
データに対してループが存在するかどうかを調べる。ル
ープが存在し、図7(b)の形状ならループ部分の点列
の中点を点Xとし、ループが存在し、図7(b)以外の
形状なら交点を点Xとし、ステップS50へ移る。ルー
プが存在しないならステップS51へ移る。なお、ルー
プの存在を調べる方法、図7(b)の形状の判定は種々
考えられるが、実施例3での方法を図24及び図25を
用いて後述する。
【0054】次に、ステップS50で、図1のループ検
出部17から点列移動部18にi番めの輪郭線データ
と、ステップS49(ステップS49-13)で求めた点
Xの座標を転送し、ステップS49(ステップS49-
9)で求めた各輪郭のループ内の点Pi,s〜Pi,tをすべ
て点Xの座標に置き換えて移動する。そして、この輪郭
線データをRAM14に転送する。
【0055】点P′i,jのループ修正後の点を点P″i,j
とする。例えば、図6(a),(b)、図7(a)は実
施例1と同じで、それぞれ第12(a),(b)、図1
3(a)のようになり、図7(b)は図26(a)〜
(c)のようになる。すなわち、図8のデータは図27
のようになる。図27における71はループしていた部
分の点列を移動した後の点であり、図5における21、
図8における31と対応している。72は、各点の太め
処理後にループ回避修正を行なった座標値を表してお
り、73は、各点の細め処理後にループ回避修正を行な
った座標値を表しており、71に対応して記載されてい
る。
【0056】次に、ステップ51は、iとNを比較し、
N本の輪郭線すべてについて処理したかどうかを調べ
る。また、文字内の輪郭線をすべて処理したかどうかを
調べる。i<Nならまだ処理していない輪郭線が残って
いるので、ステップS44から繰り返す。そうでないな
らN本の輪郭線をすべて処理したことになるので、ステ
ップS52へ移る。次に、ステップS52は、図1のR
AM14から太めまたは細め処理後の1文字分のデータ
を出力部13に転送する。該出力部13では、前記デー
タを所定の文字の大きさのデータに変換し、輪郭毎に各
点を順に直線または曲線で結ぶ。これでこの文字の輪郭
ができるので、輪郭内のドットパターンで埋めてラスタ
データに変換し、これを表示部や印刷部などに出力して
終了する。
【0057】図24及び図25は、図23におけるステ
ップS49でのループ部分を検出する処理のフローチャ
ートである。以下、各ステップ(S)に従って順に説明
する。まず、ステップS49-1で、i番めの輪郭線を構
成している点を区別する変数jに初期値0を代入してお
く。次に、ステップS49-2で、変数jを1つ進める。
次に、ステップS49-3で、同じくi番めの輪郭線を構
成している点を区別する変数kに初期値0を入れてお
く。次に、ステップS49-4で、変数kを1つ進める。
【0058】次に、ステップS49-5で、kとQ[i]
を比較し、i番めの輪郭線上の点をすべて処理したかど
うかを調べる。k<Q[i]ならまだ処理していない点
が残っているので、ステップS49-2から繰り返す。そ
うでないならi番目の輪郭線上の点はすべて処理したこ
とになるので、ステップS49-6へ移る。次に、ステッ
プS49-6で、jとQ[i]を比較し、i番めの輪郭線
上の点をすべて処理したかどうかを調べる。j<Q
[i]ならまだ処理していない点が残っているので、ス
テップS51から繰り返す。そうでないならi番目の輪
郭線上の点はすべて処理したことになるので、ステップ
S49-7へ移る。
【0059】次に、ステップS49-7で、ステップS4
9-8での処理の邪魔にならないように、j≠kの場合の
みステップS49-8へ移り、j=kの場合にはステップ
S49-4から繰り返す。次に、ステップS49-8で、点
P′i,jとP′i,j+1をつなぐ直線または曲線の関数をf
とし、点P′i,kとP′i,k+1をつなぐ直線または曲線の
関数をgとし、関数fと関数gが互いに点P′i,j
P′i,j+1の間で、かつ点P′i,kとP′i,k+1の間に交
点があるかどうかを調べる。交点があるならここでルー
プが存在したことになりステップS49-9へ移る。交点
が存在しないならステップS49-4から繰り返す。
【0060】例えば、図6(a)での場合を図15で説
明する。この場合はi=3で、j=12、k=15の
時、点P′3,12とP′3,13をつなぐ直線または曲線の関
数がf、点P′3,15とP′3,16をつなぐ直線または曲線
の関数がgとなり、関数fと関数gの交点は点P′3,12
とP′3,13の間で、かつ点P′3,15とP′3,16の間にな
るのでループが存在したことになる。
【0061】次に、図24のステップS49-9で、交点
が存在する時の輪郭内の番号j+1を変数sに、kの値
を変数tにとっておく。前記ステップS50では、この
sからtまでの点を移動する。例えば、図6(a)の例
では、sに13を代入、tに15を代入する。このsか
らtまでの範囲の点がループ内の点となる。
【0062】次に、ステップS49-10で、点P′i,s
関数fが入る角度inと、点P′i,tを関数gが出る角
度outを求める。すなわち、inは関数fの点P′
i,sにおける角度、outは関数gの点P′i,tにおける
角度である。例えば、図26(a)でinとoutを求
める。次に、ステップS49-11で、このループが図7
(b)の形状であるかどうかの判定を行う。以下、実施
例3での判定方法について説明する。例えば、(|in
|+|out|)が(180°±α)の範囲内にあり
(αは許容誤差範囲)、かつ、点P′i,sと点P′i,t
間の距離がパラメータβ以内であるなら、このループが
図7(b)の形状であるとする。もし、図7(b)の形
状であるならステップS49-13へ、そうでないならス
テップS49-12で移る。
【0063】次に、ステップS49-12で、関数fの関
数gの交点を点Xとする。次に、ステップS49-13
で、点P′i,sと点P′i,tの中点を点Xとする。前記ス
テップS50ではこの点Xにループ内の点を移動する。
ここでループ部分を検出する処理は終り、ステップS5
0へ移る。実施例1での方法では図7(b)の形状は図
26(b)のようになるが、実施例3では図26(c)
のようになる。
【0064】次に、実施例4について説明する。前記実
施例1〜3では、太めまたは細め処理を行なった後、不
具合な点の例として輪郭線にループが発生した場合をあ
げたが、他の不具合な場合でも同様の方法で不具合を回
避できる。以下、この方法について説明する。図28
(a)のような形状部分を太めまたは細め処理を行う
と、図28(b)のような形状になることがある。実施
例4ではこの形状を回避する例について説明する。ま
た、実施例1をテーブル化した実施例2と同様に、これ
も移動先をテーブル化しておき、このテーブルから移動
先を求めることもできるが、これについては述べるまで
もないので省略する。
【0065】図29は、本発明による太め細め文字生成
装置の更に他の実施例(実施例4)を説明するための構
成図で、図中、81は入力部、82はフォントデータ記
憶部、83は出力部、84はRAM、85はCPU、8
6は太め細め処理部、87は不具合形状検出部、88は
点列移動部である。なお、文字形状を説明する図の一部
は実施例1と同じである。
【0066】入力部81からの文字コードをもとに、フ
ォントデータ記憶部82からRAM84に1文字分のア
ウトラインフォントデータを読み込む。例えば、フォン
トデータ記憶部82には、フォントデータが1文字単位
に文字コード順に記憶されており、各文字のデータの先
頭番地もテーブルとして記憶している。CPU85は、
前記入力部81から与えられた文字コードをもとに、前
記テーブルを参照して各文字のデータの記憶場所の先頭
番地を求め、該番地からのデータをRAM84に転送す
る。
【0067】太め細め処理部86は、アウトラインフォ
ントを構成している点列に所定の太めあるいは細め処理
を行なうためのものである。点列移動部88は、前記太
めあるいは細め処理が行なわれたアウトラインフォント
の輪郭上の不具合な点列を移動する先を、関数またはテ
ーブルを用いて求め、前記点列の移動先に前記輪郭線上
の点列を移動する。出力部83は、前記移動された点列
を含む全点列をアウトラインフォントデータとして出力
する。
【0068】不具合形状検出部87は、太め細め処理さ
れた輪郭線データに対して、不具合形状が存在するかど
うかを調べる。該不具合形状検出部87から点列移動部
88に輪郭線データと点Xの座標を転送し、各輪郭の点
をすべての点Xの座標に置き換えて移動する。該輪郭線
データはRAM84に転送される。
【0069】図30及び図31は、図29に示す実施例
4の動作を説明するためのフローチャートである。以
下、各ステップ(S)に従って順に説明する。まず、ス
テップS61で、入力部81からの文字コードをもと
に、フォントデータ記憶部82からRAM84に、1文
字分のアウトラインフォントデータを読み込む。例え
ば、フォントデータ記憶部82は1文字単位に文字コー
ド順に記憶されており、各文字のデータの先頭番地もテ
ーブルとして記憶している。CPU85は、入力部81
から与えられた文字コードをもとに、このテーブルを参
照して各文字のデータの記憶場所の先頭番地を求め、こ
の番地からのデータをRAM84に転送する。各文字
は、各文字が何本の輪郭線からできており、各輪郭線が
何個の点からできているのかをデータ内に持っているの
で、1文字のデータの終りが分かる。
【0070】読み込んだデータは、たとえば、図4の文
字「他」の●印のように文字の輪郭を構成する点列が順
に(図では時計回りに)並んでいる。ここでは、この文
字の輪郭線の数は5本で、各輪郭線を構成している点を
順に、P1,1〜P1,12、P2,1〜P2,11、P3,1
3,21、P4,1〜P4,10、P5,1〜P5 ,21とする。RAM
84に読み込んだこのデータは、例えば、図5のように
なっている。図5における21は読み込んだアウトライ
ンデータの点であり、22は21の各点に対応した座標
値を表しており、図4での点と対応している。
【0071】次に、ステップS62で、輪郭線の本数を
Nに、i(1≦i≦N)番めの輪郭線を構成している点
の数をQ[i]にとっておく。例えば、図4で、N=
5、Q[1]=12、Q[2]=11、Q[3]=2
1、Q[4]=10、Q[5]=21である。次に、ス
テップS63で、輪郭線を区別する変数iに初期値0を
代入しておく。次に、ステップS64で、i番めの輪郭
線を構成している点を区別する変数jに初期値0を代入
しておく。次に、ステップS65で、変数iを1つ進め
る。次に、ステップS66で、変数jを1つ進める。
【0072】次に、ステップS67で、RAM84から
太め細め処理部86にデータを転送し、太めまたは細め
処理を行なう。ここで、各点Pi,jに太めまたは細め処
理を行った処理後の点を点P′i,jとする。例えば、C
PU85はRAM84から3点Pi,j-1、Pi,j、P
i,j+1を太め細め処理部86に転送し、2点Pi,j-1、P
i,jを通る直線と、2点Pi,j、Pi,j+1を通る直線をそ
れぞれ平行移動し、その交点を太めまたは細め処理後の
点P′i,jとする。このとき、j=0の時にはPi,j-1
なくPi,Q[i]を、j=Q[i]の時にはPi,j+1でなく
i,0を用いる。そしてこの点を太め細め処理部86内
に保持しておく。
【0073】次に、ステップS68は、jとQ[i]を
比較し、i番めの輪郭線上の点をすべて処理したか調べ
る。j<Q[i]ならまだ太めまたは細め処理していな
い点が残っているので、ステップS66から繰り返す。
そうでないならi番目の輪郭線上の点はすべて処理した
ことになるので、このi番めの太め細め処理部86内に
保持しておいた太め細め処理後データをRAM84へ転
送し、ステップS69へ移る。
【0074】ここまでで輪郭線毎に太めまたは細め処理
が行なわれる。図28(a)のような形状に太めまたは
細め処理をすると、図28(b)のようになることがあ
る。この理由について説明する。図28(c)のように
点aで太め量Vと点bで太め量Wが大きく違う場合、点
a′は、直線LをVだけ平行移動した直線L′と、直線
MをVだけ平行移動した直線M′との交点であり、点
b′は、直線MをWだけ平行移動した直線M′と、直線
NをWだけ平行移動した直線N′との交点であるためお
こる。
【0075】これを回避するため、以下の処理に移る。
次に、ステップS69で、ステップS68で太めまたは
細め処理をされたi番めの輪郭線のデータをRAM84
から不具合形状検出部87に転送し、この輪郭線データ
に対して図28(b)のような形状部分が存在するかど
うかを調べる。存在するなら直線L′とM′の交点を点
Xとし、ステップS70へ移る。存在しないならステッ
プS71へ移る。なお、図28(b)の形状の判定は種
々考えられるが、実施例4での方法を図32を用いて後
述する。
【0076】次に、ステップS70で、図29の不具合
形状検出部87から点列移動部88にi番めの輪郭線デ
ータと、ステップS69(ステップS69-11)で求め
た点Xの座標を転送し、ステップS69(ステップS6
9-8、69-10)で求めた各輪郭の点Pi,s〜Pi,tをす
べて点Xの座標に置き換えて移動する。そしてこの輪郭
線データをRAM84に転送する。
【0077】点P′i,jのループ修正後の点をP″i,j
する。例えば、図28(b)の形状は図28(e)のよ
うになる。次に、ステップS71は、iとNを比較し、
N本の輪郭線すべてについて処理したかどうかを調べ
る。また文字内の輪郭線をすべて処理したかどうかを調
べる。i<Nならまだ処理していない輪郭線が残ってい
るので、ステップS64から繰り返す。そうでないなら
N本の輪郭線をすべて処理したことになるのでステップ
S72へ移る。
【0078】次に、ステップS72は、RAM84から
太めまたは細め処理後の1文字分のデータを出力部83
に転送する。該出力部83では、このデータを所定の文
字の大きさのデータに変換し、輪郭毎に各点を順に直線
または曲線で結ぶ。これでこの文字の輪郭ができるの
で、輪郭内をドットパターンで埋めラスタデータに変換
し、これを表示部や印刷部などに出力して終了する。
【0079】図32は、図31のステップS69でのル
ープ部分を検出する処理のフローチャートである。以
下、各ステップ(S)に従って順に説明する。まず、ス
テップS69-1で、i番めの輪郭線を構成している点を
区別する変数jに初期値0を代入しておく。また、変数
flagに初期値0をいれておく。次に、ステップS6
9-2で、変数jを1つ進める。次に、ステップS69-3
で、jとQ[i]を比較し、i番めの輪郭線上の点をす
べて処理したか調べる。j<Q[i]ならまだ太めまた
は細め処理していない点が残っているので、ステップS
71から繰り返す。そうでないならi番目の輪郭線上の
点はすべて処理したことになるので、ステップS69-4
へ移る。
【0080】次に、ステップS69-4で、太めまたは細
め処理前の点P′i,j-1からPi,jへ向かうベクトルと、
点Pi,jから点Pi,j+1へ向かうベクトルの外積を求め、
変数Aに代入する。例えば、図28(a)での場合、点
aに向かうベクトルと点aから点bに向かうベクトルの
外積を変数Aに代入する。次に、ステップS69-5で、
太めまたは細め処理後の点P′i,j-1からと点P′i,j
向かうベクトルと、P′i,jから点P′i,j+1へ向かうベ
クトルの外積を求め、変数Bに代入する。例えば、図2
8(b)での場合、点a′に向かうベクトルと点a′か
ら点b′に向かうベクトルの外積を変数Bに代入する。
【0081】次に、ステップS69-6でA×Bを求め、
負ならステップS69-7へ移り、負でないならステップ
S69-2へ移る。A×Bが負なら太めまたは細め処理の
前後で、輪郭線の向きが変化していることになるので、
不具合な点であることが分かる。例えば、図28
(a),(b)では、点aに向かうベクトルと点aから
点bに向かうベクトルは反時計回りであるが、点a′に
向かうベクトルと点a′から点b′に向かうベクトルは
時計回りになっており、輪郭線の向きが変わっている。
【0082】次に、ステップS69-7で、輪郭内の番号
j−1を変数sに、jを変数tにとっておく。前記ステ
ップS70では、この変数sからtまでの点を移動す
る。次に、ステップS69-8で、点P′i,s-1と点P′
i,sを通る直線と点P′i,tと点P′i,t+1を通る直線の
交点を求め、これを点Xとする。例えば、図28(b)
は(d)のようになる。前記ステップS70ではこの点
Xに集める。実施例4では図28(e)のようになる。
【0083】前述した実施例1〜4では、点Pi,jの太
めまたは細め処理後の点P′i,jの座標を特願平5−2
47057号の方法で求めたが、もちろん他の方法で点
P′i,jを求めてもかまわない。例えば、前述した特開
平4−136898号公報などでも構わない。なお、特
願平5−247057号に記載されているものは、あら
かじめ移動方向や移動量などの変形情報を作成すること
なく、太め細めの文字が簡単に得られるようにするため
に、記憶手段から、アウトラインフォントデータを読出
手段によって読み出し、各点の連続する2点を通る直線
を直線計算手段で求め、太め細め量入力手段で入力した
量だけこの直線を平行移動手段によって平行移動し、平
行移動した連続する2つの直線の交点を交点計算手段に
よって求め、この交点を太め細め後のアウトラインフォ
ントデータとして出力手段によって出力するものであ
る。
【0084】
【発明の効果】以上の説明から明らかなように、本発明
によると、以下のような効果がある。 ()請求項に対応する効果:太めあるいは細め処理
が行なわれたアウトラインフォントの輪郭に、ループ
部分が存在するかどうかを調べるループ検出手段と、該
ループ検出手段によって得られたデータをもとに、前記
ループ部分を構成している点列を移動する移動先を求め
る関数、または該関数によってあらかじめ前記移動先を
求めたテーブルから前記点列を移動する点列移動手段と
を設けているので、アウトラインフォントの輪郭線に、
太めまたは細め処理によってループが発生した場合に、
ループ部分の点列を関数またはテーブルを用いて求め
前記移動先に移動することで、ループのない輪郭線デ
ータにして出力でき、文字品質の劣化を防ぐことができ
る。 ()請求項に対応する効果:前記点列移動手段は、
太めまたは細め処理によってループが発生した場合に、
前記ループ部分の始点を形成した隣り合う輪郭線のう
ち、前位にある前位輪郭線を示す第1の関数と、前記
ープ部分の終点を形成した隣り合う輪郭線のうち、後位
にある後位輪郭線を示す第2の関数との二つの連立方程
式を解き、該二つの連立方程式の解である前記前位輪郭
線と前記後位輪郭線との交点を、前記ループ部分を構成
している前記点列すべての移動先とするので、アウトラ
インフォントの輪郭線に、太めまたは細め処理によって
ループが発生した場合に、前記交点に、前記ループ部分
前記点列をすべて移動することで、ループのない輪郭
線データにして出力でき、文字品質の劣化を防ぐことが
できる
【図面の簡単な説明】
【図1】本発明による太め細め文字の生成装置の一実施
例(実施例1)を説明するための構成図である。
【図2】本発明の実施例1における処理の流れを説明す
るためのフローチャート(その1)である。
【図3】本発明の実施例1における処理の流れを説明す
るためのフローチャート(その2)である。
【図4】本発明におけるアウトラインフォントの一般的
な例を説明する図である。
【図5】本発明の実施例1における図4の文字のデータ
例を示す図である。
【図6】本発明における文字に太め処理を行なった場合
のループが発生する例を示す図である。
【図7】本発明における文字に細め処理を行なった場合
のループが発生する例を示す図である。
【図8】本発明の実施例1における図4の文字に太め細
めを実施した時のデータ例を示す図である。
【図9】本発明の実施例1における太め処理を説明する
ための図である。
【図10】本発明の実施例1における太め処理によって
ループが発生する例を説明するための図である。
【図11】本発明の実施例1におけるループ部分を検出
する処理を説明するためのフローチャートである。
【図12】図6のループ部分に本発明の実施例1の処理
を行ないループをなくした例を示す図である。
【図13】図7のループ部分に本発明の実施例1の処理
を行ないループをなくした例を示す図である。
【図14】本発明の実施例1における図4の文字に太め
細めを実施し、ループをなくした時のデータ例を示す図
である。
【図15】本発明の実施例1における図6(a)の部分
にループ検出を行なった時の例を示す図である。
【図16】本発明の実施例1における図4の文字に太め
を実施した例を示す図である。
【図17】本発明の実施例1における図4の文字に細め
を実施した例を示す図である。
【図18】本発明の実施例2におけるループ修正テーブ
ルの例を説明するための図である。
【図19】本発明による太め細め文字の生成装置の他の
実施例(実施例2)を説明するための構成図である。
【図20】本発明による実施例2における処理の流れを
説明するためのフローチャート(その1)である。
【図21】本発明による実施例2における処理の流れを
説明するためのフローチャート(その2)である。
【図22】本発明の実施例3における処理の流れを説明
するためのフローチャート(その1)である。
【図23】本発明の実施例3における処理の流れを説明
するためのフローチャート(その2)である。
【図24】本発明の実施例3におけるループ部分を検出
する処理を説明するためのフローチャート(その1)で
ある。
【図25】本発明の実施例3におけるループ部分を検出
する処理を説明するためのフローチャート(その2)で
ある。
【図26】本発明の実施例3におけるループ部分を検出
する処理を説明する図及び修正した例の図である。
【図27】本発明の実施例3における図4の文字に太め
細めを実施し、ループをなくした時のデータ例を示す図
である。
【図28】本発明の実施例4における不具合な部分発生
する例を説明する図及び修正したときの例を示す図であ
る。
【図29】本発明による太め細め文字の生成装置の更に
他の実施例(実施例4)を説明するための構成図であ
る。
【図30】本発明の実施例4における処理の流れを説明
するためのフローチャート(その1)である。
【図31】本発明の実施例4における処理の流れを説明
するためのフローチャート(その2)である。
【図32】本発明の実施例4における不具合な部分を検
出する処理を説明するためのフローチャートである。
【符号の説明】
11,61,81…入力部、12,62,82…フォン
トデータ記憶部、13,63,83…出力部、14,6
4,84…RAM(Random Access Memory)、1
5,65,85…CPU(中央処理装置)、16,6
6,86…太め細め処理部、17…ループ検出部、1
8,88…点列移動部、67…修正データ記憶部、68
…点移動部、87…不具合形状検出部。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 高羽 洋樹 大阪府大阪市阿倍野区長池町22番22号 シャープ株式会社内 (56)参考文献 特開 平6−138865(JP,A) 特開 平7−160242(JP,A) 特開 平6−27924(JP,A) 特開 平2−224079(JP,A) (58)調査した分野(Int.Cl.7,DB名) G09G 5/24

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 アウトラインフォントを構成している点
    列に所定の太めあるいは細め処理を行なうための太め細
    め手段と、該太め細め手段により、太めあるいは細め処
    理が行なわれたアウトラインフォントの輪郭に、ルー
    プ部分が存在するかどうかを調べるループ検出手段と、
    該ループ検出手段によって得られたデータをもとに、
    ループ部分を構成している前記輪郭線の点列を移動す
    移動先を求める関数、または該関数によってあらかじ
    前記移動先を求めたテーブルから前記点列を移動する
    点列移動手段と、該点列移動手段により移動された点列
    を含む全点列をアウトラインフォントデータとして出力
    するための出力手段とを有することを特徴とする太め細
    め文字生成装置。
  2. 【請求項2】 前記点列移動手段は、前記ループ部分の
    始点を形成した隣り合う輪郭線のうち、前位にある前位
    輪郭線を示す第1の関数と、前記ループ部分の終点を形
    成した隣り合う輪郭線のうち、後位にある後位輪郭線を
    示す第2の関数との二つの連立方程式を解き、該二つの
    連立方程式の解である前記前位輪郭線と前記後位輪郭線
    の交点を、前記ループ部分を構成している前記点列す
    べての移動先とすることを特徴とする請求項記載の太
    め細め文字生成装置
JP22007994A 1994-09-14 1994-09-14 太め細め文字生成装置 Expired - Lifetime JP3238580B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP22007994A JP3238580B2 (ja) 1994-09-14 1994-09-14 太め細め文字生成装置
US08/463,258 US5867172A (en) 1994-09-14 1995-06-05 Thickened and thinned character generating device including elements for removing undesirably formed outline portions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22007994A JP3238580B2 (ja) 1994-09-14 1994-09-14 太め細め文字生成装置

Publications (2)

Publication Number Publication Date
JPH0883060A JPH0883060A (ja) 1996-03-26
JP3238580B2 true JP3238580B2 (ja) 2001-12-17

Family

ID=16745609

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22007994A Expired - Lifetime JP3238580B2 (ja) 1994-09-14 1994-09-14 太め細め文字生成装置

Country Status (2)

Country Link
US (1) US5867172A (ja)
JP (1) JP3238580B2 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3437037B2 (ja) * 1996-08-23 2003-08-18 シャープ株式会社 文字パターン生成装置
JP3576797B2 (ja) * 1997-04-01 2004-10-13 キヤノン株式会社 図形処理装置、図形処理方法、文字処理装置および文字処理方法
US6288726B1 (en) * 1997-06-27 2001-09-11 Microsoft Corporation Method for rendering glyphs using a layout services library
US6034701A (en) * 1998-03-24 2000-03-07 Electronic Data Systems Corporation Method and system for displaying mixed sized fonts for character based displays
US6404435B1 (en) * 1998-04-03 2002-06-11 Avid Technology, Inc. Method and apparatus for three-dimensional alphanumeric character animation
US6512522B1 (en) 1999-04-15 2003-01-28 Avid Technology, Inc. Animation of three-dimensional characters along a path for motion video sequences
US6930686B1 (en) * 1999-06-17 2005-08-16 International Business Machines Corporation Method and apparatus for drawing thick graphic primitives
US7710422B2 (en) * 2004-07-26 2010-05-04 Microsoft Corporation Font representations
JP4227627B2 (ja) * 2006-04-24 2009-02-18 キヤノン株式会社 インクジェット記録装置および画像処理方法
JP4878209B2 (ja) * 2006-05-15 2012-02-15 キヤノン株式会社 画像処理装置、画像処理方法、コンピュータプログラム
US9448706B2 (en) * 2009-07-29 2016-09-20 Synopsys, Inc. Loop removal in electronic design automation
CN103186365B (zh) * 2011-12-30 2015-08-12 北大方正集团有限公司 一种根据字形轮廓变化生成控制指令的方法及系统
JP6253440B2 (ja) * 2014-02-18 2017-12-27 株式会社Screenホールディングス ベクトルデータ処理装置、画像記録システム、ベクトルデータ処理方法およびプログラム
WO2015141260A1 (ja) * 2014-03-17 2015-09-24 株式会社河合楽器製作所 手書き音楽記号認識装置およびプログラム

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59210482A (ja) * 1983-05-13 1984-11-29 株式会社東芝 文字パタ−ン発生装置
JPS61143792A (ja) * 1984-12-17 1986-07-01 株式会社東芝 文字パタ−ン発生装置
JP2562458B2 (ja) * 1986-08-20 1996-12-11 ダイナラブ インコーポレイテッド コンピュータシステム用文字発生方法
US5398311A (en) * 1987-02-25 1995-03-14 Canon Kabushiki Kaisha Character processing apparatus and method for processing character data as an array of coordinate points of contour lines
US5475807A (en) * 1988-12-19 1995-12-12 Canon Kabushiki Kaisha Character processing apparatus
JP2836086B2 (ja) * 1989-03-10 1998-12-14 セイコーエプソン株式会社 文字パターンデータ発生装置
US5099435A (en) * 1989-03-31 1992-03-24 Bitstream, Inc. Method and apparatus for conversion of outline characters to bitmap characters
US5155805A (en) * 1989-05-08 1992-10-13 Apple Computer, Inc. Method and apparatus for moving control points in displaying digital typeface on raster output devices
JPH0424689A (ja) * 1990-05-21 1992-01-28 Canon Inc 画像処理装置
JP3189276B2 (ja) * 1990-09-12 2001-07-16 ブラザー工業株式会社 データ変換装置
JP2887263B2 (ja) * 1990-09-28 1999-04-26 富士ゼロックス株式会社 文字変形装置
US5280576A (en) * 1991-12-24 1994-01-18 Xerox Corporation Method of adjusting the weight of a character of an outline font
US5526476A (en) * 1992-12-07 1996-06-11 Fujitsu Limited Method and apparatus for generating character patterns expressed by coordinates of a coordinate system
JP2964841B2 (ja) * 1993-07-15 1999-10-18 ブラザー工業株式会社 データ変換装置

Also Published As

Publication number Publication date
US5867172A (en) 1999-02-02
JPH0883060A (ja) 1996-03-26

Similar Documents

Publication Publication Date Title
JP3238580B2 (ja) 太め細め文字生成装置
US5930408A (en) Character pattern generation
US5959635A (en) Character pattern generator
KR970008546B1 (ko) 문자 또는 도형의 처리방법
JPH0916146A (ja) 文字・記号パターン発生装置
JP3037854B2 (ja) 文字生成方法及びその装置
US5519412A (en) Pattern processing method
JP2770582B2 (ja) 図形塗潰し装置
JP3055187B2 (ja) 輪郭線データ処理装置
JPH05232926A (ja) 文字記号発生装置
JPS62211692A (ja) 異なるサイズ文字の作成方式
JPH10143134A (ja) 文字の生成と記憶のための方法と装置
JP3315861B2 (ja) 文字生成装置
JP3066060B2 (ja) ベゼー曲線区間の多角形近似方式
JP3344538B2 (ja) 文字生成装置
JP3039214B2 (ja) データ変換装置
JPH02266480A (ja) 高品質文字パターン発生方式
JP2910101B2 (ja) ベクトル・フォント・データの構成点補正装置
JP2646437B2 (ja) データ拡大時のジャギ補正装置
JP3039015B2 (ja) 文字処理装置
JPH08101675A (ja) フォント展開装置
JP3082228B2 (ja) データ変換装置
JP3030998B2 (ja) 文字発生装置
JP3536894B2 (ja) 図形処理装置
JP2802646B2 (ja) ベクトルフオントによる文字パターンの変倍処理方法

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071005

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20081005

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20081005

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20091005

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20091005

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20101005

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20111005

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20121005

Year of fee payment: 11