(57)【要約】【課題】  フォントのアウトラインデータを変えることなく、簡単な方法で視認性の高いフォントを描画することを目的とする。【解決手段】  ベクトル形式のフォントデータを取得し、フォントデータをスキャンラインデータに変換し、フォントデータを平行移動させたときのスキャンラインデータを生成する。前記スキャンラインデータと前記平行移動したスキャンラインデータから、それぞれのスコアを計算して、前記スコアを比較し、描画するスキャンラインデータを決定し、決定されたスキャンラインデータに基づいて、フォントを描画する。【選択図】  図２
2014063105.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル形式のフォントデータを取得するフォントデータ取得手段と、
前記フォントデータをスキャンラインデータに変換するスキャンラインデータ変換手段と、
前記フォントデータを平行移動させたときのスキャンラインデータを生成する平行移動スキャンラインデータ変換手段と、
前記スキャンラインデータと前記平行移動したスキャンラインデータから、それぞれのスコアを計算するスコア計算手段と、
前記スコアを比較し、描画するスキャンラインデータを決定するスキャンラインデータ決定手段と、
前記スキャンラインデータ決定手段で決定されたスキャンラインデータに基づいて、フォントを描画する描画処理手段を有することを特徴とする描画処理装置。
【請求項２】
前記平行移動スキャンラインデータ変換手段は、平行移動量を適用して、平行移動したスキャンラインデータを生成することを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記平行移動スキャンラインデータ変換手段は、アンチエイリアス処理の階調数によって平行移動量を決定することを特徴とする、請求項２に記載の描画処理装置。
【請求項４】
平行移動したスキャンラインデータを生成する処理を行うかどうかを判定する判定手段を有し、平行移動したスキャンラインデータを生成する処理を行わないと判定された場合、前記描画処理手段は、前記スキャンラインデータ変換手段によって生成されたスキャンラインデータに基づいて描画処理を行うことを特徴とする請求項１乃至３何れか１項に記載の描画処理装置。
【請求項５】
前記判定手段は、描画モードが高品位描画モードであるか、高速描画モードであるかを判定し、高速描画モードである場合に平行移動したスキャンラインデータを生成する処理を行わないと判定することを特徴とする請求項４に記載の描画処理装置。
【請求項６】
前記判定手段は、描画するフォントのサイズを取得し、フォントサイズが所定の閾値より大きい場合に平行移動したスキャンラインデータを生成する処理を行わないと判定することを特徴とする請求項４に記載の描画処理装置。
【請求項７】
前記平行移動スキャンラインデータ変換手段は、複数の平行移動したスキャンラインデータを並列処理で生成することを特徴とする請求項１乃至６の何れか１項に記載の描画処理装置。
【請求項８】
描画処理装置の制御方法であって、
フォントデータ取得手段が、ベクトル形式のフォントデータを取得するフォントデータ取得工程と、
スキャンラインデータ変換手段が、前記フォントデータをスキャンラインデータに変換するスキャンラインデータ変換工程と、
平行移動スキャンラインデータ変換手段が、前記フォントデータを平行移動させたときのスキャンラインデータを生成する平行移動スキャンラインデータ変換工程と、
スコア計算手段が、前記スキャンラインデータと前記平行移動したスキャンラインデータから、それぞれのスコアを計算するスコア計算工程と、
スキャンラインデータ決定手段が、前記スコアを比較し、描画するスキャンラインデータを決定するスキャンラインデータ決定工程と、
描画処理手段が、前記スキャンラインデータ決定工程で決定されたスキャンラインデータに基づいて、フォントを描画する描画処理工程を有することを特徴とする描画処理装置の制御方法。
【請求項９】
判定手段が、平行移動したスキャンラインデータを生成する処理を行うかどうかを判定する判定工程を有し、平行移動したスキャンラインデータを生成する処理を行わないと判定された場合、前記平行移動スキャンラインデータ変換工程は行わず、前記描画処理工程は、前記スキャンラインデータ変換手段によって生成されたスキャンラインデータに基づいて描画処理を行うことを特徴とする請求項８に記載の描画処理装置の制御方法。
【請求項１０】
前記判定工程は、描画モードが高品位描画モードであるか、高速描画モードであるかを判定し、高速描画モードである場合に平行移動したスキャンラインデータを生成する処理を行わないと判定することを特徴とする請求項９に記載の描画処理装置の制御方法。
【請求項１１】
前記判定工程は、描画するフォントのサイズを取得し、フォントサイズが所定の閾値より大きい場合に平行移動したスキャンラインデータを生成する処理を行わないと判定することを特徴とする請求項９に記載の描画処理装置の制御方法。
【請求項１２】
コンピュータを請求項１乃至７の何れか１項に記載の描画処理装置として機能させるためのプログラム。
【請求項１３】
請求項１２に記載のプログラムを格納した、読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アウトラインフォントを描画するための処理に関する。
【背景技術】
【０００２】
アウトラインフォントを小さなサイズで描画するときに、アウトラインデータをそのまま使用すると、画数の多い漢字などは文字内部が塗りつぶされてしまい、視認性が低下することがある。視認性が低下しないようにするための技術として、ヒンティングという技術が存在している。ヒンティング技術は大きく分けて２つある。フォントデータに埋め込まれたヒント情報をもとにヒンティングを行うものをマニュアルヒンティングと呼ぶ。一方、アウトラインフォントのデータを解析して視認性が向上するように補正するものをオートヒンティングという。フォントのアウトラインデータをピクセル間のグリッドに合うように補正するグリッドフィッティングという技術はオートヒンティング技術の１つである。また、文字から画を削除することや、位置を修正することによって塗りつぶしを解消し、視認性を高める技術が公開されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１０６７２９
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、マニュアルヒンティングによる方法では、アウトラインデータにヒント情報を埋め込むため、データ量が増加するという課題があった。一方、オートヒンティングによる方法では、文字の画同士の組み合わせで計算する必要があり、複雑な文字になるほど計算コストが高い。
そこで本発明では、フォントのアウトラインデータを変えることなく、簡単な方法で視認性の高いフォントを描画することを目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明に係る描画処理装置は、ベクトル形式のフォントデータを取得するフォントデータ取得手段と、前記フォントデータをスキャンラインデータに変換するスキャンラインデータ変換手段と、前記フォントデータを平行移動させたときのスキャンラインデータを生成する平行移動スキャンラインデータ変換手段と、前記スキャンラインデータと前記平行移動したスキャンラインデータから、それぞれのスコアを計算するスコア計算手段と、前記スコアを比較し、描画するスキャンラインデータを決定するスキャンラインデータ決定手段と、前記スキャンラインデータ決定手段で決定されたスキャンラインデータに基づいて、フォントを描画するフォント描画手段を有することを特徴とする。
【発明の効果】
【０００６】
本発明により、フォントのアウトラインデータを変えることなく、簡単な方法で視認性の高いフォントを描画することができる。
【図面の簡単な説明】
【０００７】
【図１】描画処理装置のハードウェア構成を示すブロック図。
【図２】描画処理装置の機能構成を示すブロック図。
【図３】描画処理装置の処理の流れを示したフローチャート。
【図４】描画処理装置が処理の対象とするフォントのデータを説明した図。
【図５】描画処理装置が生成するスキャンラインデータを説明した図。
【図６】描画処理装置のスコア計算処理を説明した図。
【発明を実施するための形態】
【０００８】
以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施の形態は特許請求の範囲に関る本発明を限定するものではなく、また、本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一な構成については、同じ符号を付して説明する。
【実施例１】
【０００９】
図１は本発明を適用した描画処理装置のハードウェア構成について説明したブロック図である。図１において、描画処理装置１００は、バス１０１、ＣＰＵ１０２、ＲＯＭ１０３、ＲＡＭ１０４、表示ユニット１０５から構成されている。ＣＰＵ１０２は装備している各機能を実行、制御する。ＲＯＭ１０３は変更を必要としないプログラムや各種パラメータを格納する。ＲＡＭ１０４はＳＤＲＡＭ、ＤＲＡＭなどによって構成され、外部装置などから供給されるプログラムやデータを一時記憶する。表示ユニット１０５は、プログラムによって描画したグラフィックスを出力する。補助記憶装置１０６は、ハードディスクドライブ、フラッシュメモリなどで構成され、データを記憶する。バス１０１はシステムバスであって、ＣＰＵ１０２、ＲＯＭ１０３、ＲＡＭ１０４、表示ユニット１０５、および補助記憶装置１０６を接続する。
【００１０】
次に、本発明を適用した描画処理装置の処理の流れを、図２に示した機能構成ブロック図と図３に示したフローチャートを参照して説明する。まず、フォントデータ取得部２０１において、ベクトル形式のフォントデータを取得する（Ｓ３０１）。ベクトル形式のフォントデータは、ＲＯＭ１０３に格納されているデータを取得してもよいし、実行しているプログラムがＲＡＭ１０４に格納し、それを参照してもよい。また、補助記憶装置１０６にあらかじめ格納されたデータを取得してもよいし、実行しているプログラムがランタイムに補助記憶装置１０６に書きこんだデータを取得してもよい。本実施例ではフォントデータの所在については限定しない。
【００１１】
ここで、フォントデータについて、詳細に説明する。フォントデータには、フォントの形状を、線分や曲線を複数組み合わせて表現されたパスデータが含まれている。図４（ａ）は、フォントの形状を構成する一般的なコマンドの例について、コマンド名、座標指定、定義について説明した図である。ここでは、ＭＯＶＥ、ＬＩＮＥ、ＱＵＡＤ、ＣＵＢＩＣ、ＣＬＯＳＥという５種類のコマンドについて説明しているが、他の種類のコマンドとして水平線、垂直線などのコマンドを含んでいてもよい。また、曲線の定義として、２次ベジェ曲線や３次ベジェ曲線の他に、円弧やさらに高次のベジェ曲線やスプライン曲線などのパラメトリック曲線のコマンドを含んでいてもよい。また、例ではコマンドの座標指定を絶対座標で表現しているが、現在座標（ｘ０，ｙ０）からの相対座標で表現されていてもよい。なお、ＭＯＶＥコマンドについては、パスコマンドの途中で出現する場合は、新規に別のパスを生成する、いわゆるサブパス生成コマンドとして作用し、たとえば漢字の偏旁のように、複数の輪郭によって形成されるフォントデータで使用される。また、本実施例では非ゼロワインディングルールで描画するものとしてフォントデータが生成されているものとするが、描画時のワインディングルールに従ってフォントデータが生成されていれば偶奇ワインディングルールでも構わない。図４（ｂ）は、本実施例で描画対象とするフォントデータの形状について図示したものである。フォント形状４０１は、パスのコマンドは、ＭＯＶＥを１個、ＣＵＢＩＣを２個、ＬＩＮＥを１１個、ＣＬＯＳＥを１個含んでいる。図４（ｃ）は、描画対象のフォントデータのコマンドおよび座標値を示したものである。
【００１２】
次に、スキャンラインデータ変換部２０２において、Ｓ３０１で取得したフォントデータからスキャンライン法を用いてスキャンラインデータを生成する（Ｓ３０２）。一般にスキャンライン法とは、図形の輪郭とｙ＝ｐ（ｐは整数）であらわされる直線の交点を求め、交点間を図形の内部として塗りつぶすアルゴリズムである。アンチエイリアス処理は、輪郭上のピクセルが図形の内部に含まれる割合（被覆率）を計算し、その被覆率に応じて不透明度の階調を決定することによって実現する。ここでのスキャンラインデータとは、ピクセルごとの被覆率の計算を完了し、不透明度の階調を決定したデータのことである。ここでは、アンチエイリアスの階調数を０から４の５階調とし、被覆率が０以上０．２未満であれば階調０、０．２以上０．４未満は階調１、０．４以上０．６未満は階調２、０．６以上０．８未満は階調３、０．８以上１．０以下は階調４とする。図４（ｂ）、（ｃ）で示したフォントデータに基づいたスキャンラインデータについて示したのが図５（ａ）〜（ｃ）である。例として、図５（ａ）における、座標（１，１）のピクセル５０１について説明する。図５（ｂ）はピクセル５０１について拡大した図である。ピクセル５０１はフォント形状４０１の輪郭が横切って通過するピクセルである。ピクセル５０１において、スキャンライン法に基づき、フォント形状４０１の輪郭の上部がフォント形状の内側であることが検出され、指定されたパスの座標値から、ピクセル５０１における被覆率は０．７５と計算できる。ピクセル５０１の階調は、被覆率が０．７５なので階調３となる。他のピクセルについても同様に被覆率を計算し、階調を求める。
【００１３】
次に、判定部２０３において、平行移動したスキャンランデータを生成する処理を行うかどうかを判定する（Ｓ３０３）。ここでは描画モードが高品位描画モードであるか高速描画モードであるかを取得し、高品位描画モードの場合は平行移動スキャンラインデータ変換処理を必要と判定し、高速描画モードの場合は不要と判断するものとする。Ｓ３０３で不要と判断された場合は、Ｓ３０２で生成されたスキャンラインデータに基づき、描画処理部２０７において描画処理を行い（Ｓ３０４）、処理を終了する。
【００１４】
なお、Ｓ３０３における判定処理について、描画モードをもとに判定する例を用いて説明したが、スキャンラインデータをそのまま描画しても視認性に大きな違いが出ない場合は不要と判断するような他の判断基準であってもよい。例えば、描画対象となっているフォントのサイズが一定以上の大きさであれば、視認性に影響を与えないことが分かっていれば、所定の閾値を設定し、フォントサイズが所定の閾値よりも大きいときは平行移動スキャンラインデータ変換処理を不要と判断してもよい。
【００１５】
次に、Ｓ３０３で平行移動したスキャンラインデータの生成処理が必要と判断された場合、平行移動スキャンラインデータ変換部２０４において、フォントデータを平行移動させたときのスキャンラインデータを生成する（Ｓ３０５）。平行移動量は、フォントの描画位置が平行移動前とずれて見えることがない程度に小さい大きさであることが望ましい。具体的には、平行移動によって得られるスキャンラインデータとＳ３０２で得られるスキャンラインデータを比較して、ピクセルの階調が１増減する程度の平行移動量が望ましい。例えば、階調数をＮとした場合、（Ｎ−１）分の１ピクセルを平行移動量とすると、条件に合致する。ここでは、異なる２つの平行移動量を適用して、２つの平行移動させたスキャンラインデータを生成する。平行移動量として平行移動量Ａと平行移動量Ｂの２つを計算することとし、平行移動量Ａは、Ｘ軸方向に０、Ｙ軸方向に＋０．２５ピクセルの平行移動とし、平行移動量Ｂは、Ｘ軸方向に０、Ｙ軸方向に−０．２５ピクセルの平行移動とする。
【００１６】
本実施例では平行移動量をＹ軸方向のみに限定したが、Ｘ軸方向の平行移動であっても、Ｘ軸方向とＹ軸方向両方の平行移動であっても構わない。また、例えば日本語の漢字などは横向きの（Ｘ軸に平行な）画が多く、Ｙ軸方向のみの平行移動で十分効果が表れることがあるので、フォントの文字コードに応じて平行移動量を変更するようにしてもよい。また、平行移動量の組み合わせの数は１つであっても複数であっても構わない。さらに、Ｓ３０５で生成する平行移動させたスキャンラインデータは、１つでもあっても複数であっても構わない。
【００１７】
平行移動量Ａを適用したフォントデータのフォント形状を図示したのが図５（ｄ）である。これをスキャンラインデータに変換した結果を図示したものが図５（ｅ）である。また、平行移動量Ｂを適用したフォントデータのフォント形状を図示したものが図５（ｆ）で、これをスキャンラインデータに変換した結果が図５（ｇ）である。
【００１８】
次に、スコア計算部２０５において、スキャンラインデータ変換部２０２で生成されたスキャンラインデータと、平行移動スキャンラインデータ変換部で生成された平行移動したスキャンラインデータについてスコアを計算する（Ｓ３０６）。スコア計算について、図５（ｃ）で示したスキャンラインデータに基づいて詳細に説明する。スコア計算は、スキャンラインデータまたは平行移動したスキャンラインデータを縦方向（Ｙ軸方向）に走査し、隣接するピクセルの階調の差の絶対値を関数に入力し、得られる値を合計することで処理される。図５（ｃ）において、例えばピクセル（０，０）の階調は０、ピクセル（６，１）の階調は３である。図６（ａ）は、スコア計算処理を示したフローチャートである。ｇ（ｘ，ｙ）はピクセル（ｘ，ｙ）の階調を示しており、Ｍは生成されたスキャンラインデータのＸ軸方向の幅、ＮはＹ軸方向の幅を示している。Ｉ、Ｊ、Ｓは変数であり、Ｓが最終的に求めるスコアとなる。図５（ｃ）の例では、Ｍ＝Ｎ＝８である。関数Ｆ（ｔ）はｔに関する一変数関数で、入力されるｔは階調の差の絶対値、つまり０以上の整数であり、さらに図６（ｃ）に示した条件を満たすものとする。
【００１９】
本実施例では、関数Ｆ（ｔ）をＦ（ｔ）＝２ｔ−１と定義する。Ｆ（ｔ）を１階微分した導関数をＦ´（ｔ）とすると、Ｆ´（ｔ）＝２ｔｌｏｇ２となる。ｔ＞０において、Ｆ´（ｔ）は単調増加関数であることは明らかであり、図６（ｃ）の条件を満たす。スコア計算処理は図６（ａ）に従い、まず変数Ｓを０で初期化する（Ｓ６０１）。次に、Ｉ、Ｊを変数とした入れ子のループを実行する（Ｓ６０２、Ｓ６０３）。ループの中では、上下に隣接しているピクセル間の階調の差の絶対値を求め、関数Ｆ（ｔ）に入力し、返り値を変数Ｓに加算する（Ｓ６０４）。この処理を、すべての上下で隣接するピクセルの組み合わせで行うことにより、計算されたＳがスコアとなる。
【００２０】
図５（ｃ）で示したスキャンラインデータについてスコアを計算すると、階調差１となる組み合わせが２３個、階調差２となる組み合わせが６個、階調差３となる組み合わせが７個あるので、スコアは９０となる。
【００２１】
次に、Ｓ３０５で生成された平行移動したスキャンラインデータについても同様にスコア計算を行う。図５（ｅ）に図示された平行移動量Ａを適用した平行移動したスキャンラインデータについてスコア計算を行うと、スコアは９０となる。図５（ｇ）で図示された平行移動量Ｂを適用した平行移動したスキャンラインデータについてスコア計算を行うと、スコアは２５５となる。
【００２２】
なお、Ｓ３０６の処理について、ここでは説明のためスキャンラインデータおよび平行移動したスキャンランデータのスコアを順次計算するように説明したが、それぞれのスコア計算処理は独立しており、図６（ｃ）に示したように並列に実行することが可能である。並列処理は複数のプロセスあるいはスレッドを実行することで実現が可能である。また、スキャンラインデータのピクセル間の組み合わせを順次取得してスコアを計算している例を用いて説明したが、これらの処理を並列に実行するようにしてもよい。図６（ｄ）は、ピクセル間の組み合わせを取得する処理を並列処理するようにしたときのフローチャートで、この場合２つの処理が並列に実行される。並列処理数は３つ以上でも構わない。ここでの並列処理は数のプロセスあるいはスレッドでも実現可能であるし、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）やその拡張機能を用いて実現することも可能である。
【００２３】
本実施例では、平行移動量Ａ、平行移動量ＢがともにＹ軸方向のみとなっているため、上下に隣接しているピクセル間の階調差に基づいて計算を行った。もしＸ軸方向にも平行移動させた場合は左右に隣接するピクセル間の階調差についても計算し、スコアに反映させる必要がある。
【００２４】
また、関数Ｆ（ｔ）をＦ（ｔ）＝２ｔ−１と定義した例について説明したが、図６（ｂ）に示した条件を満たす関数であれば他の定義でもよい。例えば、Ｆ（ｔ）＝ｔ２であってもよい。この場合、図５（ｃ）に示されたスキャンラインデータのスコアは１２０、図５（ｅ）に示された平行移動したスキャンラインデータのスコアは１１０、図５（ｇ）に示された平行移動したスキャンラインデータのスコアは３１０となる。また、連続関数である必要はなく、階調差の絶対値としてとりうる値の集合を始域とし、図６（ｂ）に示された条件を満たす写像として定義されてもよい。本実施例では、階調の差の絶対値としてとりうる値は０、１、２、３、４である。始域を集合｛０，１，２，３，４｝とし、これらの始域に対してのみ定義された関数（写像）であってもよく、例えばＦ（０）＝０，Ｆ（１）＝１，Ｆ（２）＝３，Ｆ（３）＝６，Ｆ（４）＝１０と、始域に対してのみ定義されていてもよい。
【００２５】
Ｓ３０６でスキャンラインデータおよび平行移動したスキャンラインデータについてスコアの計算が完了したあと、スキャンラインデータ決定部２０６において、描画するスキャンラインデータを決定する（Ｓ３０７）。ここでは、スコアの最も高いスキャンラインデータを選択する。本実施例においては、平行移動量Ｂを適用した平行移動したスキャンラインデータのスコアが最も高いので、それを選択する。次に、描画処理部２０７において、選択されたスキャンラインデータに基づいて描画処理を行い（Ｓ３０８）、処理を終了する。
【００２６】
以上説明した処理制御を行うことで、視認性の高いフォントを描画することができる。
なお、これらの実施形態では、描画処理装置を例に説明したが、本発明は、印刷装置、デジタルカメラ、複写機、複合機、スキャナ、テレビ等、表示部を有するあらゆる装置に適用可能である。
【００２７】
本発明はソフトウエアにより実現しても良い。すなわち、ソフトウエアのプログラムコードを記録した記録媒体をシステムあるいは装置に供給し、そのシステムあるいは装置のＣＰＵが記録媒体に格納されたプログラムコードを読み出し実行することで実現しても良い。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、磁気テープ、メモリカードなどを用いることができる。また、本発明は、プログラムコードの指示に基づき、コンピュータ上で稼動しているオペレーティングシステムなどが実際の処理の一部または全部を行い、その処理によって機能が実現される場合にも適用され得る。
【図１】
2014063105.tif 000003
【図２】
2014063105.tif 000004
【図３】
2014063105.tif 000005
【図４】
2014063105.tif 000006
【図５】
2014063105.tif 000007
【図６】
2014063105.tif 000008