(57)【要約】【課題】  対応するアウトラインに必要な制御点が欠けている場合にグラフィカルオブジェクトを適切にレンダリングする機構を提供すること。【解決手段】  コンピュータシステムが、グラフィカルオブジェクトの特徴について目標幅を計算する。コンピュータシステムは、その特徴に対応する中心線の位置を計算する。コンピュータシステムは、特徴について計算された目標幅に基づいて、計算された中心線の位置をグリッド位置に丸める。コンピュータシステムは、特徴の１つまたは複数の制御点の位置を、中心線のグリッド位置に適合するように調整する。【選択図】  図５
2006018811.tif 000002
【特許請求の範囲】
【請求項１】
関連するグラフィカルオブジェクトの複数のセットへのアクセスを有しており、それぞれの関連グラフィカルオブジェクトセットは、前記関連グラフィカルオブジェクトセットからの個々のグラフィカルオブジェクトを表すアウトラインを含むコンピューティングシステムにおいて、対応するアウトラインにグラフィカルオブジェクトの特徴のための制御点が欠けている場合に前記グラフィカルオブジェクトのレンダリングのし方を動的に最適化するための方法であって、
前記グラフィカルオブジェクトの特徴について目標幅を計算する行為と、
前記特徴に対応する中心線の位置を計算する行為と、
前記特徴について計算された前記目標幅に基づいて、前記中心線の計算された前記位置をグリッド位置に丸める行為と、
前記特徴の１つまたは複数の制御点の位置を前記中心線の前記グリッド位置に適合するように調整する行為とを含むことを特徴とする方法。
【請求項２】
前記グラフィカルオブジェクトの特徴について目標幅を計算する前記行為は、テキストの文字の垂直ストロークについて目標幅を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記グラフィカルオブジェクトの特徴について目標幅を計算する前記行為は、テキストの文字の水平ストロークについて目標幅を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記グラフィカルオブジェクトの特徴について目標幅を計算する前記行為は、テキストの文字の対角ストロークについて目標幅を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記グラフィカルオブジェクトの特徴について目標幅を計算する前記行為は、前記グラフィカルオブジェクトがレンダリングされるタイプサイズおよび解像度に基づいて目標幅を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記グラフィカルオブジェクトの特徴について目標幅を計算する前記行為は、ヒントプロセッサがフォントプログラムからロードされた命令を処理する行為を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記特徴に対応する中心線の位置を計算する前記行為は、テキストの文字の水平ストロークに対応する中心線の位置を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記特徴に対応する中心線の位置を計算する前記行為は、テキストの文字の垂直ストロークに対応する中心線の位置を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記特徴に対応する中心線の位置を計算する前記行為は、テキストの文字の対角ストロークに対応する中心線の位置を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記特徴に対応する中心線の位置を計算する前記行為は、前記アウトラインの制御点の位置に基づいて中心線の位置を計算する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記特徴に対応する中心線の位置を計算する前記行為は、ヒントプロセッサがフォントプログラムからロードされた命令を処理する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記特徴について計算された前記目標幅に基づいて前記中心線の計算された前記位置をグリッド位置に丸める前記行為は、前記中心線の計算された前記位置を半分のグリッド位置に丸める行為を含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記特徴について計算された前記目標幅に基づいて前記中心線の計算された前記位置をグリッド位置に丸める前記行為は、前記中心線の計算された前記位置を全グリッド位置に丸める行為を含むことを特徴とする請求項１に記載の方法。
【請求項１４】
前記特徴について計算された前記目標幅に基づいて前記中心線の計算された前記位置をグリッド位置に丸める前記行為は、テキストの文字について計算された前記目標幅に基づいて、前記中心線の計算された前記位置を丸める行為を含むことを特徴とする請求項１に記載の方法。
【請求項１５】
前記特徴について計算された前記目標幅に基づいて前記中心線の計算された前記位置をグリッド位置に丸める前記行為は、ヒントプロセッサがフォントプログラムからロードされた命令を処理する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１６】
前記特徴の１つまたは複数の制御点の位置を前記中心線の前記グリッド位置に適合するように調整する前記行為は、前記特徴の計算された前記中心線および元の中心に基づいて、１つまたは複数の制御点の位置を調整する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１７】
前記特徴の１つまたは複数の制御点の位置を前記中心線の前記グリッド位置に適合するように調整する前記行為は、前記１つまたは複数の制御点の位置を前記ストロークの方向に垂直に調整する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１８】
前記特徴の１つまたは複数の制御点の位置を前記中心線の前記グリッド位置に適合するように調整する前記行為は、ヒントプロセッサがフォントプログラムからロードされた命令を処理する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１９】
それぞれのグリッド位置はピクセルを含むことを特徴とする請求項１に記載の方法。
【請求項２０】
関連するグラフィカルオブジェクトの複数のセットへのアクセスを有しており、それぞれの関連グラフィカルオブジェクトセットは前記関連グラフィカルオブジェクトセットからの個々のグラフィカルオブジェクトを表すアウトラインを含むコンピューティングシステムにおいて使用し、対応するアウトラインに前記グラフィカルオブジェクトの特徴のための制御点が欠けている場合にグラフィカルオブジェクトのレンダリングのし方を動的に最適化するための方法を実施するためのコンピュータプログラム製品であって、プロセッサによって実行されたときに、前記コンピューティングシステムに、
前記グラフィカルオブジェクトの特徴について目標幅を計算する行為と、
前記特徴に対応する中心線の位置を計算する行為と、
前記特徴について計算された前記目標幅に基づいて、前記中心線について計算された前記位置をグリッド位置に丸める行為と、
前記特徴の１つまたは複数の制御点の位置を前記中心線の前記グリッド位置に適合するように調整する行為とを実施させる命令が格納された１つまたは複数のコンピュータ読取り可能媒体を含むことを特徴とするコンピュータプログラム製品。
【請求項２１】
関連するグラフィカルオブジェクトの複数のセットへのアクセスを有しており、それぞれの関連グラフィカルオブジェクトセットは、前記関連グラフィカルオブジェクトセットからの個々のグラフィカルオブジェクトを表すアウトラインを含むコンピューティングシステムにおいて、対応するアウトラインにグラフィカルオブジェクトの特徴についての制御点が欠けている場合に前記グラフィカルオブジェクトのレンダリングのし方を動的に最適化するための方法であって、
前記グラフィカルオブジェクトの特徴について目標幅を計算する行為と、
前記特徴に対応する中心線の位置を計算する行為と、
前記特徴の制御点の位置を前記中心線の適切に丸められた位置に適合するように操作する行為とを含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキストなどのグラフィカルオブジェクトのレンダリングに関する。より詳細には、本発明は、対応するアウトラインに必要な制御点が欠けている場合にグラフィカルオブジェクトを適切にレンダリングすることに関する。
【背景技術】
【０００２】
コンピューティング技術は、人々の労働および娯楽のやり方を変えてきた。コンピューティングシステムは現在、デスクトップコンピュータ、ラップトップコンピュータ、タブレットＰＣ、携帯情報端末（ＰＤＡ：Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）などを含めて、幅広い様々な形を取り得る。家庭用装置（冷蔵庫、オーブン、ミシン、セキュリティシステムなど）でさえも、様々なレベルの処理能力を有し、よってコンピューティングシステムと見なされ得る。時が進むにつれて、従来は処理能力を有していなかった複数の装置に処理能力が組み込まれ得る。したがって、コンピューティングシステムの多様性が増す可能性が高くなり得る。
【０００３】
人間とインターフェースするほぼすべてのコンピューティングシステムは、情報を伝えるために表示を使用する。多くの場合、表示の魅力は、コンピューティングシステムの重要な属性であると見なされる。テキスト情報（ラテンベースの文字など）の表示は一般に、あるフォントの文字を表すグリフを処理することを含む。グリフは、対応する文字のアウトラインが任意のグリッド間隔（ピクセルグリッドなど）で生成され得るように、制御点、および制御点をつなぐための命令を含む。文字はしばしば、より大きいサイズおよびより高い解像度での表示のために定義され、次いで、文字がより小さいサイズおよびより低い解像度（太字、イタリック体など）でレンダリングされるときに数学的に縮小される（または他のやり方で操作される）。したがって、ある文字について（フォント単位に）、減少された数の記述、また潜在的には１つの記述だけが格納される必要がある。
【０００４】
文字を縮小するために、制御点の位置は、倍率で割られ得る。例えば、ある文字を１０の倍率で縮小するために、（より高い解像度で）文字を定義する各制御点の座標は、１０で割られることができる。１００×１００グリッドの表示のために文字を定義する制御点が、１０×１０グリッドの表示のために縮小されることがある。したがって、グリッド位置（５０，３０）の制御点は、グリッド位置（５，３）の制御点に縮小されることができ、グリッド位置（７０，７０）の制御点は、グリッド位置（７，７）の制御点に縮小され得るなどである。したがって、文字を表現するより小さいアウトラインは、計算されることができ、文字について複数の異なるサイズのビットマップを格納する必要性が小さくなる。
【０００５】
次いで、オンにされるグリッド位置（ピクセルなど）、およびオフにされるグリッド位置を識別するために（「スキャン変換」としばしば称されるプロセス）、より小さいアウトラインが分析され得る。あるスキャン変換アルゴリズムは、グリッド位置の中心が、結果としてもたらされる縮小されたアウトラインの内側にあるか、それとも外側にあるかを判断する。グリッド位置の中心が縮小アウトラインの内側にある場合、グリッド位置は、オンにされる。一方、グリッド位置の中心が縮小アウトラインの外側にある場合、グリッド位置は、オフにされる。
【０００６】
残念なことに、時々また特に低い解像度では、スキャン変換の結果によって、許容できない文字の表現がもたらされる。許容できない文字表現は、縮小プロセスの丸め誤差、またはスキャン変換プロセス自体によって生じ得る。さらに、丸め誤差は、単一のグリッド位置（ピクセルなど）が文字の特徴と合っている場合には、文字表現により大きな影響を及ぼす。例えば、あるグリッド位置を５０×５０グリッド上で不適切にオン（またはオフ）させる丸め誤差は、人間の目で検出不可能でさえあり得る。しかし、あるグリッド位置を４×４グリッド上で不適切にオン（またはオフ）させる丸め誤差は、人間の目には許容し得ないものと知覚される文字をもたらし得る。したがって、低い解像度のスキャン変換は、文字の元のアウトラインのトポロジを保持できないことさえあり、例えば切断されたグリッド位置、不適切に配置された特徴、および対称性の欠如などを引き起こす。
【０００７】
例えば、アウトラインが、対応する文字特徴に関連する減少された数の制御ポイントを含む場合、アウトラインのスキャン変換によって、対応する文字特徴がグリッド間隔の非最適な位置にレンダリングされることになり得る。ラテン（ギリシャ、キリルなど）フォントの複数の文字は、文字の最上部と最下部の間のどこかに、水平のストローク（「クロスバー」）をもつ。例えば、大文字「Ｈ」は、最上部と最下部の間のおよそ中間にクロスバーをもつ。図１に、Ｔｉｍｅｓ  Ｎｅｗ  Ｒｏｍａｎ体の大文字「Ｈ」のアウトライン１００を示す。意図的に、クロスバーの位置は、「Ｈ」の水平ストロークの数学的な中間点のわずか上にある。つまり、距離１０１は、距離１０２より小さい。
【０００８】
しかし、「Ｈ」がより小さいサイズで、またより低い解像度（例えば９６ｄｐｉ装置上で９ｐｔなど）でレンダリングされるまでには、累積された量子化誤差によって、数学的な中間点より下にレンダリングされるクロスバーがもたらされ得る。クロスバーは意図的には中間点より上にレンダリングされるべきものであったので、クロスバーを中間点より下にレンダリングすることは、最適とはいえない。ピクセルパターン１０３は、９ｐｔおよび９６ｄｐｉ解像度でＴｉｍｅｓ  Ｎｅｗ  Ｒｏｍａｎ体の大文字「Ｈ」をレンダリングするためにオンにされるピクセル（すなわちアウトライン１００上でスキャン変換を実施した結果）を表している。ピクセルパターン１０３に示すように、クロスバーは、「Ｈ」の垂直ストロークの数学的な中間点より下にある。
【０００９】
非最適なレンダリング結果の１つの原因は、「Ｈ」がクロスバーのエッジ間には制御点をもつが、例えばクロスバーのエッジの間の中心に沿った想像線（破線１０４で表す）上には制御点をもたないことから生じる。したがって、従来のヒンティングの解決策は、例えばクロスバーの上側エッジ上の第１の制御点（制御点１０７）に第１の制約を加える。第１の制約は、ベースライン上（制御点１０９など）およびキャップライン上（制御点１０６）の他の制御点に対して垂直方向の第１制御点の比例位置を強制する。次いで、従来の解決策は、例えばクロスバーの下側エッジ上の第２の制御点（制御点１０８）に第２の制約をも追加する。第２の制約は、下側エッジの第２の制御点と、前に制約を受けた上側エッジの第１制御点（制御点１０７）の間の距離を強制する。
【００１０】
第１と第２両方の制約によって位置を垂直方向に直近のグリッド位置（ピクセルなど）に丸めなければならないので、第１および第２の制約はそれぞれ、いずれかのやり方で（切上げまたは切捨て）、最大０．５ピクセルの丸め誤差をもたらし得る。よくない場合では、こうした丸め誤差（第１と第２の両方の制約による切捨て）が累積して、クロスバーが数学的な中間点より下に置かれる。
【００１１】
さらに、アウトラインが１つまたは複数のグリッド位置の中心を通過する場合、アウトラインのスキャン変換は、グリッド間隔内で非対称にレンダリングされる文字をもたらし得る。イタリック体フォントは、その対角ストロークのぎざぎざの性質がイタリック体フォントの処理をさらに難しくし、また量子化誤差が問題を複雑にし得るので、とりわけ困難な問題を提示する。
【００１２】
上述したように、スキャンコンバータは、あるピクセルが、内部ピクセルにも、外部ピクセルにもとれ得る場合（アウトラインがピクセルの中心を通過する場合など）にも、内部ピクセルを定義しなければならない。例えば、ＴｒｕｅＴｙｐｅ（登録商標）は、アウトラインがピクセルの中心を通る場合、そのピクセルはオンにされると定義する。したがって、アウトラインが直線であり、またその線の横に進んだ長さ（ｒｕｎ）と縦に進んだ長さ（ｒｉｓｅ）（傾き）が奇数の対に縮小される場合、アウトラインは１つまたは複数のピクセル中心を通過し、ＴｒｕｅＴｙｐｅ（登録商標）は、余分のピクセルのように見え得るピクセルをオンにする。
【００１３】
次に図２を参照すると、図２に、Ａｒｉａｌイタリック体の大文字「Ｈ」が示されている。左のイタリック体のストロークの右エッジ（制御点２１１から制御点２１４）は、横に１ピクセル進むごとに５ピクセル上がり、すなわち合計で２ピクセルに横に進み、１０ピクセル上がり、それは、奇数１と５の対に縮小されるが、余分なピクセル（ピクセル２３１、２３２および２３３）が容易に観察され得る。さらに、中心がちょうどアウトライン上にあるピクセルがオフにされる場合にも、問題がやはり生じ得る。例えば、図２で、中心がちょうどアウトライン上にあるピクセルが（オンではなく）オフにされる場合、２つのピクセルが失われ（ピクセル２３４および２３６）、ピクセルパターン内に不連続点がもたらされる。ある手法は、中心がちょうどアウトライン上にあるピクセルを、エッジが左エッジと右エッジで交替するのに伴って、内部ピクセルと外部ピクセルで交替するように定義することである。これは一部のイタリック体ストロークの問題を解決し得るが、こうした交替の手法は、丸めのストロークに関する新しい問題をも生じさせ得る。例えば、この交替手法は、「Ｏ」などの文字に非対称のピクセルパターンをもたらし得る。
【００１４】
さらに、制約に適合するための制御点の動きは、制御点を不正確な位置に移動させ得る。不正確な位置にある制御点をさらなる計算のために使用することは、グリッド間隔内の対応する文字の非最適なレンダリングをもたらし得る。ヒンティング制御点はしばしば、いくつかの制御ポイントを他の制御点と位置合わせすることを含み得る。例えば、引き続き図２を参照すると、制御点２１１および２１４がそれ自体の制約（例えばキャップラインおよびベースラインの制約をそれぞれ受ける）に従う結果として移動されていることがあるので、制御点２１２および２１３は、制御点２１１および２１４と位置合わせされる必要があり得る。位置合わせの行為は数学的に正確な概念であるが、フォントヒントプロセッサの内部の数値精度が一般に限られているので、フォントヒンティングの言語（ＴｒｕｅＴｙｐｅ（登録商標）など）に関してそれを実装すると、数値的な誤差をもたらす可能性が高い。例えば、フォントヒンティング言語ＴｒｕｅＴｙｐｅ（登録商標）は、小数点以下の制御点位置データを格納するために６バイナリを使用し、数値結果ごとに、２6すなわち1／64ピクセルまでだけ正確であり得る。したがって、例えば制御点２１２をその親の点２１１および２１４と位置合わせする結果は、せいぜい直近の1／64ピクセルまでが正確である。
【００１５】
より具体的には、制御点２１４から制御点２１１までの線は、（ピクセルパターン２０３に示すように）第２ピクセル横に進み、１０ピクセル上がっているので、１ピクセル上がるごとに、０．２ピクセル横に進むことになる。したがって、制御点３は６ピクセル上がっているので、制御点３では、それは、１．２ピクセル横に進み、または1／64ピクセルに関して言えば、１12.8／64横に進むはずである。残念ながら、12.8／64は、すべてではないとしても、ほとんどのヒントプロセッサの精度限界の範囲外である。すなわち、12.8／64は単に表現されることができず、いずれかのやり方で（直近の1／64に切上げまたは切捨てなど）丸められなければならない。ヒントプロセッサは一般に、例えば常に打切り、常に切捨て、または常に切上げするように、既定の丸め動作を行うように構成される。図２では、また一見すると偶然のように、クロスバーの制御点は、切り上げると実際の値により近似する（１２．８は１２より１３に近い）にもかかわらず、切り捨てられている。この誤差は、偽のピクセルも、欠けたピクセルももたらさないので、害を及ぼさないように見える。
【００１６】
それに反して、やはり１12.8／64だけ横に進む制御点２１５では、切捨ては、偽のピクセル（ピクセル２３５）をもたらしていないが、切上げは、それを妨げている。さらに、大部分の典型的なフォントヒントプロセッサは、丸めの方向に関係なく、何分の１かのピクセル分が除かれた結果をもたらし得る。したがって、丸めが正しいとしても、位置合わせの問題が依然として生じ得る。
【００１７】
さらに、多すぎる制御点を含む文字アウトラインによって、グリッド間隔内の対応する文字の非最適なレンダリングがもたらされ得る。例えば、アウトラインの厳密な形状によって複雑さが増している場合、誤ったピクセルが潜在的に生じ得る。例えば、図３に、Ｐａｌａｔｉｎｏイタリック体の「Ｈ」を示す。Ｐａｌａｔｉｎｏイタリック体の「Ｈ」は、図２に示すＡｒｉａｌイタリック体の「Ｈ」よりかなり多くの制御点を含む。Ｐａｌａｔｉｎｏイタリック体の「Ｈ」のストロークのエッジは、わずかに曲がっており、したがって、こうした曲線をモデル化するための追加の制御点を含む。図３に示すように、こうした制御点は、アウトライン３００上に一見すると無作為に配置されている。従来のスキャン変換をアウトライン３００に適用すると、例えばピクセルパターン３０３などの非最適なピクセルパターンがもたらされる。
【００１８】
残念ながら、一部のヒントプロセッサは、連続した番号によって制御点を参照しており、制御点を削除すると、他の制御点の番号変更を引き起こし得る。したがって、制御点を番号変更すると、既存のヒンティング命令に不正確な制御点番号を参照させることになり得る。例えば、アウトライン３００上の無関係な制御点と見なされ得るものを取り除くと、既存のヒントが残りのいずれかの制御点に不適切に適用される（またはまったく適用されない）ことになり得る。ヒントを残りの制御点に不適切に適用すると、対応するピクセルパターンが大きく劣化し得る。
【００１９】
したがって、スキャン変換（より小さいポイントサイズ、またはより低い解像度でなど）の時々非最適なまたは不適切な結果を補償するために、印刷技術者は、文字アウトラインにデルタ例外ヒント（ｄｅｌｔａ−ｅｘｃｅｐｔｉｏｎ  ｈｉｎｔ）（ＴｒｕｅＴｙｐｅ（登録商標）命令）を手作業で加えることによって、その場しのぎ的なやり方で、スキャン変換プロセスをプログラムで制御する。デルタ例外ヒントは、個々の文字に特有の、また特定のタイプサイズに特有のヒントである。つまり、残念な量子化問題が存在する（フォントの）各タイプサイズについて、印刷技術者は、多分複数のデルタ例外命令を適宜追加しなければならない。デルタ例外ヒントは、非常に特有なものなので、それが適用される文字とともに（フォントファイル内などに）一般に格納される。さらにデルタ例外ヒントの使用は、対応する例外命令を適用する前後に複数のタイプサイズを繰返し外観検査することを必要とする反復プロセスであり、それは、手間のかかることであり、矛盾をもたらす傾向にある。
【００２０】
それぞれ異なるフォントにおける芸術的および技術的特徴が幅広く異なることに一部起因して、デルタ例外ヒントは、個々のフォントにも適応させなければならない。つまり、あるフォント用のデルタ例外ヒントは一般に、他のフォント用に（同じ文字用でも）再利用され得ない。よって、それぞれの新しいフォントについて、印刷技術者は、適切なデルタ例外ヒントを繰返し判断する必要がある。したがって、幅広い様々なフォントに渡ってスキャン変換の非最適なまたは不適切な結果を補償するのに必要なリソースは、かなり大きいことがある。
【発明の開示】
【発明が解決しようとする課題】
【００２１】
したがって、ピクセルパターンの最適化を自動的に行うための機構が有利である。
【課題を解決するための手段】
【００２２】
従来技術に関する上記の問題は、対応するアウトラインに必要な制御点が欠けている場合にグラフィカルオブジェクトを適切にレンダリングすることを対象とする本発明の原理によって克服される。コンピュータシステムは、グラフィカルオブジェクトのある特徴について、目標幅を計算する。コンピュータシステムは、その特徴に対応する中心線の位置を計算する。コンピュータシステムは、特徴について計算された目標幅に基づいて、計算された中心線位置をグリッド位置に丸める。コンピュータシステムは、特徴の１つまたは複数の制御点の位置を中心線のグリッド位置に適合するように調整する。
【００２３】
本発明の追加の特徴および利点について、以下の説明で述べ、またそれは一部、説明から明らかであり、または本発明を実施することによって知ることができる。本発明の特徴および利点は、添付の特許請求の範囲中に具体的に指摘された手段および組合せによって実現され取得され得る。本発明のこうしたおよび他の特徴は、以下の説明、および添付の特許請求の範囲からより完全に明らかになり、または以下に述べるように本発明を実施することによって知ることができる。
【００２４】
本発明の上記他の利点および特徴が得られ得るやり方について説明するために、上記で簡潔に述べた本発明についてのより具体的な説明が、添付の図面に示されたその特定の実施形態を参照することによって提供される。こうした図面は本発明の典型的な実施形態を示すものにすぎず、したがって、その範囲を限定するものと見なすべきでないとの理解のもとに、本発明について、添付の図面を用いることによって、さらに具体的にまた詳細に述べ説明する。
【発明を実施するための最良の形態】
【００２５】
本発明の原理は、対応するアウトラインに必要な制御点が欠けている場合にグラフィカルオブジェクトを適切にレンダリングするためのシステム、方法、コンピュータプログラム製品に関する。コンピュータシステムは、グラフィカルオブジェクトのある特徴について、目標の幅を計算する。コンピュータシステムは、その特徴に対応する中心線の位置を計算する。コンピュータシステムは、特徴について計算された目標幅に基づいて、計算された中心線の位置をグリッド位置に丸める。コンピュータシステムは、特徴の１つまたは複数の制御点の位置を中心線のグリッド位置に適合するように調整する。
【００２６】
本発明の範囲内の実施形態は、それ上に格納されたコンピュータ実行可能命令またはデータ構造体を搬送しまたは保持するためのコンピュータ読取り可能媒体を含む。こうしたコンピュータ読取り可能媒体は、汎用または特定目的のコンピューティングシステムによってアクセスできる任意の使用可能媒体であり得る。限定するためではなく、例を挙げると、こうしたコンピュータ読取り媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶装置、あるいはコンピュータ実行可能命令、コンピュータ読取り可能命令、またはデータ構造体の形の所望のプログラムコード手段を搬送しまたは格納するために使用することができ、また汎用または特定目的のコンピューティングシステムによってアクセス可能である他の任意の媒体を含み得る。
【００２７】
本説明および特許請求の範囲において、「ネットワーク」は、コンピューティングシステムおよび／またはモジュール間の電子データの移送を可能にする１つまたは複数のデータリンクと定義される。情報がネットワークまたは別の通信接続（ハードワイヤード、無線、またはハードワイヤードと無線の組合せ）を介してコンピューティングシステムに転送されまたは提供される場合、その接続は、コンピュータ読取り可能媒体と適切に見なされる。したがって、こうした任意の接続は、コンピューティング読取り媒体と適切に称される。上記内容の組合せもまた、コンピュータ読取り可能媒体の範囲内に含まれるべきである。コンピュータ実行可能命令は、例えば、汎用コンピューティングシステムまたは特定目的コンピューティングシステムに特定の機能または機能群を実施させる命令およびデータを含む。コンピュータ実行可能命令は、例えばバイナリ、アセンブリ言語などの中間形式命令、さらにはソースコードなどであり得る。
【００２８】
本説明および特許請求の範囲において、「コンピューティングシステム」は、電子データ上で操作を実施するために共に働く１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはその組合せと定義される。例えば、コンピューティングシステムの定義は、パーソナルコンピュータのハードウェア構成要素、およびパーソナルコンピュータのオペレーティングシステムなどのソフトウェアモジュールを含む。モジュールの物理レイアウトは重要でない。コンピューティングシステムは、ネットワークを介して結合された１つまたは複数のコンピュータを含み得る。同様に、コンピューティングシステムは、内部モジュール（メモリおよびプロセッサなど）が電子データ上で操作を実施するために共に働く単一の物理装置（携帯電話や携帯情報端末（ＰＤＡ）など）を含み得る。
【００２９】
本明細書では、用語「モジュール」または「コンポーネント」は、コンピューティングシステム上で実行されるソフトウェアオブジェクトまたはルーチンを指し得る。本明細書で述べるそれぞれ異なるコンポーネント、モジュール、エンジンおよびサービスは、コンピューティングシステム上で実行されるオブジェクトまたはプロセス（別個のスレッドなど）として実装され得る。本明細書で述べるシステムおよび方法は、ソフトウェアで実装されることが好ましいが、ソフトウェアとハードウェア、またはハードウェアで実装することも可能であり、またそれが企図されている。
【００３０】
本発明は、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブル家電、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ページャなどを含めて、多くのタイプのコンピューティングシステム構成を備えたネットワークコンピューティング環境で実施され得ることが当業者には理解されよう。本発明は、ネットワークを介して（ハードワイヤードのデータリンク、無線データリンク、またはハードワイヤードと無線データリンクの組合せによって）リンクされたローカルとリモートの両方のコンピューティングシステムがタスクを実施する分散システム環境内で実施されることもできる。分散システム環境では、プログラムモジュールは、ローカルとリモートの両方の記憶装置内に配置され得る。
【００３１】
図４に、さもなければ不適切にレンダリングされ、または非最適なやり方でレンダリングなれるグラフィカルオブジェクトを適切にレンダリングするためのコンピュータアーキテクチャの一例４００を示す。一般に、アプリケーションプログラム（アプリケーションプログラム４１７など）からのコマンド（レンダリングコマンド４１８など）に応答して、コンピューティングシステム４１６は、例えばテキストなどのグラフィカルオブジェクトを出力装置４２８でレンダリングさせ得る。例えば、Ａｒｉａｌフォントおよび６ポイントサイズの選択に応答して、ワードプロセッサは次いで、６ポイントサイズのＡｒｉａｌフォントを使用して、テキストをレンダリングし得る。
【００３２】
例えば、フォントファイル４０１（例えば、コンピューティングシステム４１６に格納され、またはそこからネットワークアクセス可能である）は、フォントプログラム４０２、ＣＶＴプログラム４０３およびグリフセット４０４を含む。フォントプログラム４０２は、フォントファイル４０１が（アプリケーションプログラム４１７などによって）アクセスされるときにロードされ得る１組の命令を含む。フォントプログラム４０２は、フォントファイル４０１内の別のところ（ＣＶＴプログラム４０３やヒント４０８など）から呼び出され得る関数定義および命令定義の作成を容易にする。ＣＶＴプログラム４０３は、ポイントサイズまたは変換が変更される場合に実行される１組の命令を含む。ＣＴＶプログラム４０３は、フォント開発者が個々のグリフにおいてこうした変更を管理する必要をなくす、フォント全般に渡る変更を容易にする。ＣＶＴプログラム４０３は、特定のポイントサイズおよび解像度でフォントに適用可能な標準化された距離（ストロークの太さ、グリフ間の距離など）、および基準の高さ１０３（大文字化のライン、下付きのラインなど）のテーブルを確立するために使用され得る。ＣＶＴプログラム４０３は、フォントプログラム４０２内に定義された他の命令および関数を呼び出す命令を含み得る。
【００３３】
グリフセット４０４（文字セットなど）は、（例えば文字を表す）複数のグリフを含み得る。グリフ４０６だけが特に示されているが、縦の楕円４４１は、グリフ４０６に加えて、他のグリフがグリフセット４０４内に含まれ得ることを表している。グリフセット４０４内の各グリフは、対応する制御点、およびグリフを適切にレンダリングするためのグリフ特有のヒントに関連付けられ得る。例えば、グリフ４０６をレンダリングするときに、制御点４０７およびヒント４０８が使用され得る。特定のグリフについてのグリフ特有のヒント（ヒント４０８など）は、フォントプログラム４０２内に定義された他の命令および関数を呼び出す命令を含み得る。
【００３４】
ヒントは、（例えばグリフセット４０４内の）グリフに関する制約を表す、例えばＴｒｕｅＴｙｐｅ（登録商標）などのフォントヒンティング言語のコンピュータ実行可能命令であり得る。一部の制約は、グリフセット４０４内の各グリフを制約し得る。例えば、ＣＶＴプログラム４０３は、グリフセット４０４内の各グリフを（例えば同じ大文字化ライン、または他のグリフからの水平距離に）制約する標準化された距離、および基準の高さを表すためのフォントヒンティング言語命令を含み得る。他の制約は、特定のグリフに特有であり得る。例えば、ヒント４０８は、グリフ４０６を制約する（例えば「Ｈ」のクロスバーに関する制約など）ためのフォントヒンティング言語命令を含み得る。
【００３５】
フォントファイルは、マスタサイズ（より大きいサイズなど）でグリフのアウトライン（マスタアウトライン４３１など）を表すための制御点を含み得る。例えば、フォントファイル４０１は、７２ポイントで（特定の解像度で）レンダリングされるグリフのための制御点およびヒントを含み得る。したがって、フォントおよびフォントサイズが（例えば表示コマンド４１８によって示されるように）選択されるときに、スケーリングモジュール４１９は、選択されたフォントサイズ（特定の解像度、さらには別の解像度での１２ポイントなど）でレンダリングするために、フォントファイル４０１にアクセスし、グリフセット４０４を縮小し得る（または拡大し得る）。スケーリングモジュール４１９は、グリフセット４０４に対応する縮小されたグリフを含むスケーリングされたグリフ４２１を出力し得る。例えば、スケーリングされたアウトライン４３３は、マスタアウトライン４３１に対応する。スケーリングされたグリフ４２１は、グリフセット４０４が縮小された後に永続するヒント４０８を含むこともできる。選択されたフォントサイズ、解像度、および例えばズーム倍率など、多分他のパラメータに一部基づいて、スケーリングモジュール４１９は、スケーリングの大きさを変えることができる。
【００３６】
グリフを縮小するために、対応する制御点の位置は、倍率で割られ得る。例えば、フォントファイル内で表されたサイズの１０分の１のサイズでグリフをレンダリングするために、（より大きいサイズで）グリフを表す各制御点の座標は、１０で割られ得る。１００×１００グリッド上で表示するために文字を定義する制御点は、１０×１０グリッド上で表示するために縮小され得る。したがって、グリッド位置（５０，３０）の制御点は、グリッド位置（５，３）の制御点に縮小されることができ、グリッド位置（７０，７０）の制御点は、グリッド位置（７，７）の制御点に縮小され得るなどである。したがって、グリフのより小さいアウトラインは、計算されることができる。
【００３７】
カラー表示装置上でレンダリングするために縮小される場合、制御点位置は、追加の精度を伴って計算され得る。例えば、一部のカラーコンピュータモニタ上のピクセルは、赤、緑および青の別個の下位成分、すなわち「サブピクセル」を含み得る。サブピクセルは、制御点が少なくともサブピクセルの精度、例えば３分の１ピクセルまで判断され得るように個々にアドレス指定され得る。サブピクセルの強度を変えると、サブピクセルがさらに濃くまたはさらに薄く知覚されることがあり、結果として、精度のさらなる向上が知覚され得る。したがって、縮小された制御点位置は、サブピクセルのアドレス、およびアドレス指定されたサブピクセルの強度を示す強度値（例えば０から２５５の範囲）を含み得る。
【００３８】
ヒントプロセッサ４２２は、（例えばより小さいサイズでの）グリフのより適切なレンダリングをもたらすためにヒント（フォントヒンティング言語の命令）を処理し得る。ヒントによっては、スケーリングされたグリフと一緒に含まれ得る。例えば、スケーリングされたグリフ４２１は、個々のグリフに対応するヒントのためのフォントヒンティング言語命令を、グリフセット（ヒント４０８など）と共に適宜含み得る。他のヒントは、フォントファイルから受信され得る。例えば、ヒントプロセッサ４２２は、フォントファイル４０１からフォントプログラム４０２およびＣＶＴプログラム４０３を受信することができる。ヒントプロセッサ４２２は、ヒントを処理し、そのヒントに従って、スケーリングされたグリフを変更する。（例えば制御点を移動して、スケーリングされたアウトラインを変更する）。ヒントプロセッサ４２２は、例えばヒンティングされたグリフ４２６などのヒンティングされたグリフを出力し得る。
【００３９】
スキャン変換モジュール４２４によっては、ヒンティングされたグリフ（ヒンティングされたグリフ４２６など）を受信することができ、オンにされるグリッド位置（ピクセル、サブピクセル、仮想ピクセルなど）を識別し、またオフにされるグリッド位置を識別し得る（「スキャン変換」と呼ばれ得るプロセス）。スキャン変換モジュール４２４は、フォントファイル４０１からの１つまたは複数のグリフのピクセル化された表現（ピクセル化表現４２７など）を出力することができる。出力装置４２８は、ピクセル化された表現（ピクセル化表現４２７など）を受信し、したがって、それをレンダリングすることができる。出力装置４２８は、例えば表示装置またはプリンタなどの、モノクロまたはカラーの出力装置であり得る。
【００４０】
図６に、本発明の原理を実施することによってもたらされるアウトライン６００および対応するピクセルパターン６０３を示す。アウトライン６００は、Ｔｉｍｅｓ  Ｎｅｗ  Ｒｏｍａｎ体の大文字「Ｈ」のアウトラインを表している。意図的に、クロスバー（ストローク６４１）の位置は、数学的な中間点よりわずか上にあり得る。つまり、距離６２１は、距離６２２より小さいことがある。
【００４１】
図５に、アウトラインに制御点が欠けている場合にグラフィカルオブジェクトのアウトラインを動的に変更するための例示的な方法５００のフローチャートを示す。方法５００について、アウトライン６００、ピクセルパターン６０３、ならびにコンピュータアーキテクチャ４００で示したコンピューティングシステム、モジュール、およびデータに関して説明する。
【００４２】
方法５００は、コンピューティングシステムがグラフィカルオブジェクトのある特徴について目標の幅（または高さ）を計算する行為（行為５０１）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、ストローク６４１の目標幅（制御点６３１と制御点６３２の間の距離など）を計算し得る。目標幅は、１つまたは複数のグリッド位置（１つまたは複数のピクセルなど）であり得る。アウトラインのサイズが、あるストロークの幅が１グリッド位置に満たないほど小さい場合、その目標幅は、１グリッド位置に切り上げられ得る。ストローク６４１は水平ストロークであるが、垂直および対角ストロークの目標幅も計算され得る。
【００４３】
方法５００は、特徴に対応する中心線の位置を計算する行為（行為５０２）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、中心線６４２の位置（中心線６４２は、制御点６３１および制御点６３２から等距離である）を計算し得る。中心線６４２は水平ストロークであるが、垂直および対角ストロークの目標幅も計算され得る。
【００４４】
方法５００は、特徴の計算された目標幅に基づいて、中心線の計算された位置をグリッド位置に丸める行為（行為５０３）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、ストローク６４１の目標幅に基づいて、中心線６４２の計算された位置をグリッド位置に丸めることができる。累積された量子化誤差の可能性を小さくするために、中心線６４２は、グリッド位置の何分の１かに丸められ得る。例えば、ストローク６４１の目標幅が奇数（奇数のグリッド位置数など）である場合、中心線６４２は、1／2グリッド位置に丸められ得る。一方、ストローク６４１の目標幅が偶数（例えば偶数のグリッド位置数など）である場合、中心線６４２は、全グリッド位置に丸められ得る。
【００４５】
方法５００は、特徴の１つまたは複数の制御点の位置を、中心線のグリッド位置に適合するように調整する行為（行為５０４）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点６３１、６３２、６３３および６３４の位置を、中心線６４２のグリッド位置に適合するように調整することができる。これによって、アウトライン６００により近似するピクセルパターンをレンダリングする確率が高くなる。例えば、これによって、ピクセルパターン６０３に示すように、クロスバーが数学的中間点より上にレンダリングされる確率が高くなる。
【００４６】
以下の第１の疑似コードの例は、アウトラインに制御点が欠けている場合にグラフィカルオブジェクトのアウトラインを動的に変更することを容易にするために定式化されかつ／または実行され得るアルゴリズムを表している。第１疑似コード例は、様々なプログラミング言語（ＴｒｕｅＴｙｐｅ（登録商標）など）で定式化され、対応するコンパイラまたはインタプリタ（ヒントプロセッサ４２２など）によって処理され得る。第１疑似コード例では、記号「／＊」と「＊／」の間のテキストは、疑似コードによって実装される機能について記述するコメントを表す。
【００４７】
行１：入力：親０，子０，子１，親１，制御値
／＊目標ストローク太さを判断する＊／
行２：ｉｆ  制御値が−１
目標ストローク太さ：＝元のストローク太さおよび１ピクセルのうちの大きい方
行３：ｅｌｓｅ
目標ストローク太さ：＝制御値および１ピクセルのうちの大きい方
行４：目標ストローク太さを直近の全ピクセルに丸める
／＊各ストロークエッジが適合するように調整されなければならない量を判断する＊／
行５：ストローク太さ調整量：＝（目標ストローク太さ−元のストローク太さ）／２
／＊ストロークの目標中心線を判断する＊／
行６：元のストローク中心線：＝（元の子０位置＋元の子１位置）／２
行７：元の親距離：＝元の親１位置−元の親０位置
行８：目標親距離：＝目標の親１位置−目標の親０位置
行９：目標ストローク中心線：＝（元のストローク中心線−元の親０位置）＊（目標親距離）／（元の親距離）＋目標の親０位置
／＊目標中心線を丸める＊／
行１０：ｉｆ  目標ストローク太さが奇数
目標ストローク中心線を半グリッド位置に丸める
行１１：ｅｌｓｅ  ／＊偶数＊／
目標ストローク中心線を全グリッド位置に丸める
／＊ストローク中心線が適合するように調整されなければならない量を判断する＊／
行１２：ストローク位置調整量：＝目標ストローク中心線−元のストローク中心線
／＊子０および子１の位置を調整する＊／
行１３：子０位置を、ストローク位置調整量−ストローク太さ調整量だけ移動する
行１４：子１位置を、ストローク位置調整量＋ストローク太さ調整量だけ移動する
【００４８】
第１疑似コード例では、行１で、入力値が受信される。行１で、親０は制御点６１２を指すことができ、子０は制御点６３２を指すことができ、子１は制御点６３１を指すことができ、親１は、制御点６１１を指し得る。引き続き行１を参照すると、制御値は、標準化された距離を表す、制御値テーブル（「ＣＶＴ」）、またはＣＶＴプログラム４０３などのＣＶＴプログラムの要素を指し得る。特徴（ストローク６４１など）について目標のストローク太さを計算するために、受信された制御値に基づいて、行２または行３が実行される。
【００４９】
行２で、元のストローク太さは、目標のタイプサイズおよび解像度に合わせてスケーリングされているが、ヒンティング命令によってはまだ修正されていないストローク太さを指す。ヒントプロセッサは多分、それぞれの制御点について２つの組の座標を維持し、一方が元の座標であり、他方がヒンティングされた（または命令を受けた）座標である。ヒント命令は、元のまたはヒンティングされた座標を参照し得る。第１疑似コード例では、元のおよびヒンティングされた座標を維持することによって、元の親距離（デザインされ、スケーリングされているが、ヒンティングされていない親間距離）、および目標の親距離、（デザインされ、スケーリングされ、かつヒンティングされた親間距離）の識別が容易になる。したがって、ヒンティング命令が適用された結果としての距離の変更の大きさが計算され得る。実施形態によっては、この大きさの割合を使用して、中心線の位置がさらに計算される。
【００５０】
次に行２と３の両方を参照すると、目標ストローク太さが、入力パラメータ（行１）、または元のストローク太さが目標ストローク太さと事実上見なされることを示す特別なパラメータ−１として供給された制御値によって判断されている。目標ストローク太さはさらに、最小距離の条件が与えられ得る。この条件が適用される場合、目標ストローク太さは、以前に判断された目標ストローク太さ、および第１ピクセルのうちの大きい方（または異なる最小ピクセル数）である。
【００５１】
行４は、目標ストローク太さを直近の全ピクセルに丸めるために実行される。行５は、目標ストローク太さに適合するようにストロークエッジが移動される距離を計算するために実行される。実施形態によっては、エッジは、対応するストロークに対して垂直方向に移動される。例えば、ストローク６４１の各エッジは、ストローク６４１の目標ストローク太さに適合するようにＹ方向にいくらかの距離を移動し得る。行６は、元のストローク中心線を計算するために実行される。実施形態によっては、元のストローク中心線は、ストロークとの垂直距離を定量化する制御点座標から計算される。例えば、制御点６３１および６３２のＹ座標を使用して、ストローク６４１の元のストローク中心線を計算することができる。
【００５２】
行７は、元の親距離を計算するために実行される。実施形態によっては、元のストローク中心線の計算と同様に、元の親距離は、ストロークとの垂直距離を定量化する制御点座標から計算される。例えば、制御点６１１のＹ座標が、制御点６１２のＹ座標から減算されて、元の親距離が計算される。行８は、目標親距離を計算するために実行される。目標の親０および親１の位置は、デザインされ、スケーリングされ、ヒンティングされた親０および１の位置である。
【００５３】
行９は、目標ストローク中心線を計算するために実行される。目標ストローク中心線を丸めるために、目標ストローク太さに基づいて、行１０または１１が実行される。ストローク太さが奇数である場合、目標ストローク中心線は、半グリッド位置に丸められる。一方、ストローク太さが偶数である場合、目標ストローク中心線は、全グリッド位置に丸められる。例えば、ストローク６４１の目標ストローク太さに基づいて、中心線６４２は、半グリッド（目標ストローク太さが奇数の場合）、または全グリッド（目標ストローク太さが偶数の場合）に丸められ得る。
【００５４】
行１２は、ストローク位置調整量を計算するために実行される。ストローク位置調整量は、ストロークが移動される、ストローク方向に垂直の距離を表し得る。例えば、ストローク６４１の位置調整量は、ストローク６４１がＹ方向に移動されることを示し得る。行１３および１４は、子制御点を、計算されたストローク位置に適合するように調整するために実行される。したがって、特徴の制御点は、特徴の不適切なレンダリングを引き起こす累積誤差の可能性を小さくするために丸められた対応する中心線に適合するように移動される。
【００５５】
図８に、アウトライン８００、および本発明の原理を実施することによってもたらされる対応するピクセルパターン８０３を示す。アウトライン８００は、Ａｒｉａｌイタリック体の大文字「Ｈ」のアウトラインを示している。図７Ａに、アウトラインがグリッド位置のほぼ中心に制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更するための例示的な方法７００のフローチャートを示す。方法７００について、アウトライン８００、ピクセルパターン８０３、ならびにコンピュータアーキテクチャ４００内のコンピューティングシステム、モジュールおよびデータに関して説明する。
【００５６】
方法７００は、アウトライン上の制御点の位置に基づいて、第１の制御点と第２の制御点の間でアウトラインがグリッド位置のほぼ中心を通ることを計算する行為（行為７０１を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点８１１、８１２、８３１および８３２の位置に基づいて、制御点８１１と８１２の間でアウトライン８００がグリッド位置（ピクセルなど）のほぼ中心を通ることを計算することができる。アウトラインがグリッド位置のほぼ中心を通ることを計算することは、アウトラインの一部の縦に進んだ長さおよび横に進んだ長さが奇数に縮小され得ることを判断することを含み得る。縦に進んだ長さおよび横に進んだ長さが奇数に縮小される場合、アウトラインがグリッド位置のほぼ中心を通る可能性が高くなる。親制御点の位置を使用して、親制御点がグリッド位置の中心からほぼ等距離にあるときを判断することもできる。
【００５７】
例えば、図８で、エッジ８４２は、Ｘ方向に２グリッド位置進み、Ｙ方向に１０グリッド位置進んでいる。その横に進んだ長さおよび縦に進んだ長さの値、２および１０は、１および５に縮小される（２は、２と１０の両方の公倍数である）。したがって、アウトライン８００が、（エッジ８４２の傾きのため）少なくとも１つのグリッド位置のほぼ中心を通る可能性が高くなる。
【００５８】
方法７００は、第１親制御点の位置を、第１の方向に、グリッド位置のサイズの第１の分数分だけ調整する行為（行為７０３）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点８１１の位置を、第１の方向に、グリッド位置（ピクセルなど）のサイズの第１の分数（１／６４など）分だけ調整することができる。第１の親制御点の調整は、グリッド間隔の軸に平行に第１親制御点を移動することを含み得る。例えば、制御点８１１は、１／６４ピクセルだけ正のＸ方向に（すなわち図８では右に）移動され得る。
【００５９】
方法７００は、第２親制御点の位置を、第１の方向に、グリッド位置のサイズの第２の分数分だけ調整する行為（行為７０３）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点８１２の位置を、第１の方向に、グリッド位置のサイズの第２の分数分だけ調整することができる。第２の分数は、第１の分数と同じ大きさのものであることも、そうでないこともある。第２の親制御点の調整は、第２親制御点をグリッド間隔の軸に平行に移動することを含み得る。例えば、制御点８１２は、１／６４ピクセルだけ負のＸ方向に（すなわち図８では左に）移動され得る。
【００６０】
一部の実施形態では、第１および第２親制御点は、グリッド位置の中心からほぼ等距離にない。したがって、第１および第２親制御点を同じ大きさだけ、例えば反対方向に調整すると、アウトラインがグリッド位置のほぼ中心をもはや通らないように、（エッジ８４２などの）スロープが変化する。
【００６１】
他の実施形態では、第１および第２親制御点は、グリッド位置の中心からほぼ等距離にある。したがって、第１および第２親制御点を、反対方向にではあるが、同じ大きさだけ移動すると、対応するエッジ（エッジ８４２など）がグリッド位置の中心の回りを回転するようになる。しかし、親制御点のこうした移動は、アウトラインがグリッド位置のほぼ中心を通ることを回避することにならない。したがって、第１および第２親制御点がグリッド位置の中心からほぼ等距離にある場合、第１と第２の両方の親制御点は、（例えば１／６４ピクセル分など）同じ方向に移動され得る。第１および第２親制御点は、同じ距離だけ移動されることも、異なる距離だけ移動されることもある。例えば制御点８１１および８１２は、正のＸ方向に同じ大きさだけ移動され得る。
【００６２】
したがって、アウトラインがグリッド位置の中心を通る場合でもグリッド位置を適切にアクティブにし、または非アクティブにする確率が高まる。これによって、アウトライン８００により近似するピクセルパターン、例えばピクセルパターン８０３をレンダリングする確率が高くなる。
【００６３】
図７Ｂに、アウトラインが不正確な制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更するための例示的な方法７５０のフローチャートを示す。方法７５０について、アウトライン８００、ピクセルパターン８０３、ならびにコンピュータアーキテクチャ４００内のコンピューティングシステム、モジュールおよびデータに関して説明する。（方法７００のように）アウトラインがグリッド位置のほぼ中心を通らないようにするためにいくつかの制御点を移動することによって、他の制御点が不正確な位置に移動され得る。つまり、制御点は、ヒントプロセッサ４０２の内部の精度限界のせいで正確に表現され得ない位置に移動され得る。しかし、方法７５０の使用は、こうした実施形態に限定されない。本説明を精査した後に、当業者には、不正確な位置の制御点をもたらし得る様々な異なる事象が存在することが明らかであろう。方法７５０を使用して、原因に関係なく、不正確な制御点位置を補償することができる。
【００６４】
方法７５０は、アウトライン上の親制御点が、制約に適合するようにグリッド間隔内の現在位置に調整されていることを検出する行為（行為７５１）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点８１１および８１２が制約に適合するように調整されていることを検出し得る。方法７５０は、アウトライン上の親制御点間の子制御点がグリッド間隔の第１の軸に沿って調整されていることを検出する行為（行為７５２）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点８３１および／または８３２の位置がＹ方向に調整されていることを検出し得る。
【００６５】
ヒンティングの結果として、（親）制御点８１１および８１２は、ＹとＸの両方の方向に調整されていることがある。同様に、方法５００を適用した結果として、（子）制御点８３２が、Ｙ方向に調整されている。したがって、制御点８３２を親制御点８１１および８１２と再び位置調整するためなどに、制御点８３２は、Ｘ方向の調整を必要とし得る。
【００６６】
方法７５０は、第１および第２の親制御点の現在位置に基づいて、子制御点の位置を、グリッド間隔の第２の軸に沿って再調整する行為（行為７５３）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点８１１および８１２の現在位置に基づいて、制御点８３１および／または制御点８３２をＸ軸上で再調整することができる。方法７５０は、第１および第２親制御点の現在位置に基づいて、子制御点の位置を、グリッド間隔の第２の軸に沿ってグリッド間隔サイズの何分の１かだけ丸める行為（行為７５４）を含む。例えば、制御点８３１および／または制御点８３２は、制御点８３１の制御点８１１に対する相対位置に基づいて、Ｘ軸に沿って、グリッド位置（ピクセルなど）の何分の１か（例えば１／６４）だけ丸められ得る。
【００６７】
制御点の位置の計算は、除算操作（線の傾きを含む計算など）を含み、したがって、ヒントプロセッサの内部精度限界の範囲外の値をもたらし得る。例えば、制御点８３１の位置計算の一環として除算操作を実施すると、ヒントプロセッサ４２２の内部精度の範囲外の値がもたらされ得る。制御点８３１と８１１の間の線の傾きは、（１２．８／６４）であり得る。しかし、ヒントプロセッサ４２２の内部精度が小数点以下の部分の数については６ビットである場合は、（１２．８／６４）を正確に表すことは不可能であり得る。したがって、（１２．８／６４）は、６ビットの精度で表現され得る値に丸め（切り捨て、または切り上げ）られ得る。
【００６８】
丸め誤差を減少させ、また多分取り除くために、（フォントプログラム４０２内などの）ヒンティング命令の小部分によって、制御点位置を計算するためのヒントプロセッサ４２２の組込み操作に代わる実装が提供され得る。例えば、丸め操作自体が除算内にたたみ込まれるならば、丸め誤差は制御され得る。ＮおよびＤが、単一の除算（Ｎ／Ｄ）で表され得る計算の整数分子および分母であり、また丸め操作が「切捨て」である場合に、フォントヒントプロセッサ内の組込み除算操作が切捨てを行うのであれば、Ｎ／Ｄは正確な結果である。例えば、小数点部分を打ち切るＴｒｕｅＴｙｐｅ（登録商標）では、これは、正確な結果である。一方、丸め操作が「切上げ」である場合、正確な結果は、（Ｎ＋Ｄ−１）／Ｄである。最後に、丸め操作が「直近への丸め」である場合、正確な結果は、（２＊Ｎ＋Ｄ）／（２＊Ｄ）である。したがって、多分、有効な分子および分母は整数であり、また１つの除算を実施して、丸め結果が取得される。切上げまたは切捨ての判断は、方法７００で行われる判断に基づき得る。
【００６９】
以下の第２の疑似コード例は、アウトラインが、グリッド位置のほぼ中心にある制御点を含み、また不正確な位置にある制御点を含む場合に、グラフィカルオブジェクトのアウトラインの動的な変更を容易にするために定式化され／または実行され得るアルゴリズムを表している。第２疑似コード例は、様々なプログラミング言語（ＴｒｕｅＴｙｐｅ（登録商標）などで定式化され、対応するコンパイラまたはインタプリタ（ヒントプロセッサ４２２など）によって処理され得る。第２疑似コード例では、記号「／＊」と「＊／」の間のテキストは、疑似コードによって実装される機能について記述するコメントを表す。
【００７０】
行２１：入力：親０，親１
行２２：入力：親０，子０，親１
行２３：入力：親０，子０，子１，親１
行２４：入力：親０，子０，子１，．．．，子ｎ−１，親１
／＊このプロセスのこの段階ではピクセルの全数である、イタリックの横および縦の長さを判断する／＊
行２５：イタリック横：＝親１  ｘ位置−親０  ｘ位置
行２６：イタリック縦：＝親１  ｙ位置−親０  ｙ位置
／＊イタリック横／イタリック縦の比を最大の２の共通倍率で縮小する／＊
行２７：縮小イタリック横：＝イタリック横
行２８：縮小イタリック縦：＝イタリック縦
行２９：ｗｈｉｌｅ  縮小イタリック横と縮小イタリック縦の両方が偶数
行３０：    縮小イタリック横：＝縮小イタリック横／２
行３１：    縮小イタリック縦：＝縮小イタリック縦／２
行３２：ｅｎｄｗｈｉｌｅ
行３３：ｉｆ  縮小イタリック横と縮小イタリック縦の両方が奇数
／＊この時点で、親０から子１のエッジは、少なくとも１つのピクセル中心を厳密に通過しており、したがって、親位置は、この問題を回避するように変更される。例えば、親１は、ヒントプロセッサの内部精度（１／６４ピクセルなど）に基づいて、できるだけ小さい分数分だけ右に移動され得る。同様に、親０は、それと同じ量だけ左に移動され得る。（非縮小）イタリック横が奇数であり、かつ（非縮小）イタリック縦が奇数である場合、対応するエッジは、親間の中間であるピクセルの中心を通過する。したがって、親を反対方向に移動すると、親間の中間の前記厳密なピクセル中心の周りでエッジが回転するが、ピクセルの中心を通過する対応するエッジが依然としてもたらされる。したがって、両方の親を同じ方向に移動することが任意に選択される。＊／
行３４：    ｉｆ  イタリック横が奇数、親１を１／６４ピクセルだけ左に移動する
行３４：    ｅｌｓｅ  親１を１／６４ピクセルだけ右に移動する
行３５：親０を１／６４ピクセルだけ左に移動する
行３６：ｅｎｄｉｆ
／＊０または１つ以上の子を調整する＊／
行３７：ｆｏｒ  それぞれの子
／＊目標ｘ位置を計算する＊／
行３８：    相対子ｙ位置：＝子ｙ位置−親０  ｙ位置
行３９：    目標ｘ位置：＝（相対子ｙ位置）＊（イタリック横）／（イタリック縦）
行４０：    ｉｆ  （相対子ｙ位置）が（イタリック縦）／２より小さいまたはそれに等しい、目標ｘ位置を直近の１／６４ピクセルに切り下げる
行４１：    ｅｌｓｅ  目標ｘ位置を直近の１／６４ピクセルに切り上げる
／＊目標ｘ位置の計算と、直近１／６４ピクセルへの切下げまたは切上げとが、単一の計算に組み合わせられ得る＊／
行４２：    調整量：＝目標ｘ位置−実際の子ｘ位置
行４３：    子を調整量だけ移動する
行４４：ｅｎｄｆｏｒ
【００７１】
第２疑似コード例内で、行２１〜２４は、受信され得るそれぞれ異なるタイプの入力を表す。一般に第２疑似コード例は、２つの親制御点、および０からＮの子制御点を受信する。表２５および２６は、イタリック横およびイタリック縦をそれぞれ計算するために実行される。例えば、ヒントプロセッサ４２２は、制御点８１１および８１２の位置に基づいて、エッジ８４２のイタリック横およびイタリック縦を計算することができる。
【００７２】
行２７〜３２は、計算されたイタリック横および計算されたイタリック縦を、最大の２の共通倍率で縮小するために実行される。例えば、行２７〜３２を実行して、２４の計算されたイタリック横、および５２の計算されたイタリック縦を、６の縮小イタリック横、および１３の縮小イタリック縦に縮小することができる（すなわち２つの繰返し）。６は２で割り切れるが、１３は割り切れないので、行２９の条件が偽であるため、ループは終了する。
【００７３】
行３３〜３６は、縮小されたイタリック横、および縮小されたイタリック縦の両方が奇数である場合に実行される。例えば、行２７〜３２によって、（例えば１２のイタリック横および５２のイタリック縦から）３の縮小イタリック横、および１３の縮小イタリック縦が計算される場合、行３３〜３６は、実行され得る。行３３〜３６の実行によって、対応するエッジがグリッド位置（ピクセルなど）の中心を通過しないようにする親制御点の適切な調整を容易にする。例えば、エッジ８４２がグリッド位置の中心を通らないように、制御点８１１および８１２は、移動され得る。
【００７４】
行３７〜４４は、対応する親制御点の調整に適合するように任意の子制御点を調整するために実行される。入力として受信されたそれぞれの子制御点について、行３８〜４３が実行され得る。例えば、行３７〜４４を実行して、制御点８３１および８３２（子制御点）を、制御点８１１および８１２（親制御点）の調整に適合するように調整することができる。行３８は、親制御点が調整された方向に対して垂直方向の親制御点に対する子制御点の位置を計算するために実行される。例えば、制御点８１１が以前に調整されている場合、制御８１１に対する制御点８３１の位置が（再）調整され得る。
【００７５】
行３９は、親制御点が調整された方向の子制御点の目標位置を計算するために実行される。例えば、行３９を実行して、Ｘ方向の制御点８３１の目標位置を計算することができる。行４０または４１は、親制御点が移動された方向に目標位置を丸めるために実行される。イタリック縦の半分と比較した子制御点の相対位置の大きさに基づいて、子制御点の目標位置が切り上げ、または切り捨てられる。例えば、行４０および４１を実行して、制御点８３１の目標位置を、Ｙ方向の制御点８３１の相対位置の大きさ、およびエッジ８４２のイタリック縦に基づいてＸ方向に丸めることができる。相対位置の大きさがイタリック縦の半分より小さい、またはそれに等しい場合、目標位置は切り捨てられる。一方、相対位置の大きさがイタリック縦の半分より大きい場合、目標位置は切り上げられる。行４２および４３は、子制御点の位置を適切に調整するために実行される。
【００７６】
したがって、アウトラインがグリッド位置の中心を通過せず、またグリッド位置中心を避けることによってもたらされる親制御点の調整に子制御点が適合するように、グラフィカルオブジェクトのアウトラインが調整され得る。したがって、グラフィカルオブジェクトの特徴は保持され、レンダリング誤差の潜在的な源は取り除かれる。
【００７７】
図１０に、アウトライン１０００、本発明の原理を実施することによってもたらされる簡略化されたアウトライン１００２、および対応するピクセルパターン１００３を示す。アウトライン１０００は、Ｐａｌａｔｉｎｏイタリック体の大文字「Ｈ」を示している。図９に、アウトラインが余分な制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更するための例示的な方法９００のフローチャートを示す。方法９００について、アウトライン１０００、簡略化されたアウトライン１００２、対応するピクセルパターン１００３、ならびにコンピュータアーキテクチャ４００内のコンピューティングシステム、モジュールおよびデータに関して説明する。
【００７８】
方法９００は、アウトラインの第１と第２の特徴の間の接合点を識別する行為（行為９０１）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、接合１０１３がストローク１０１６とストローク１０１７の間の接合点であることを識別し得る。接合点は、アウトラインのエッジ１００を外挿することによって識別され得る。例えば、ストローク１０１６のエッジは、ストローク１０１６の各エッジに沿った想像イタリックラインを、ストローク１０１７（セリフ）の最上部を通過する想像水平ラインと交差させるように外挿され得る。接合１０１３は、こうした２つの想像線の交差を示している。他の特徴の接合について、他の類似の外挿が実施され得る。
【００７９】
方法９００は、アウトラインの第１の特徴に含まれる余分な制御点にアクセスする行為（行為９０２）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点１０１１または制御点１０１２にアクセスすることができる。選択されたポイントサイズおよび解像度に基づいて、制御点１０１１および制御点１０１２は、それがアウトライン１０００から取り除かれた場合にＰｌａｔｉｎｏ大文字「Ｈ」のレンダリングのされ方を大きく変えない制御点であり得る。例えば、より小さいポイントサイズおよびより低い解像度では、アウトライン１０００の小さい変化によってもたらされる特徴を正確にレンダリングすることは、不可能ではないとしても困難であり得る。
【００８０】
方法９００は、第１方向の余分な制御点の位置が第１の方向の接合点の位置と実質上同じになるまで、余分な制御点を第１方向に移動する行為（行為９０３）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点１０１１がＸ方向で接合１０１３と位置が合うように、制御点１０１１を移動することができる。同様に、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点１０１２が接合１０１３とＹ方向で位置が合うように、制御点１０１２を移動することができる。
【００８１】
方法９００は、第１方向とは異なる第２の方向の余分な制御点の位置が、第２方向の接合点の位置と実質上同じになるまで、余分な制御点を第２方向に移動する行為（行為９０４）を含む。例えば、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点１０１１の位置が接合１０１３の位置と実質上同じになるまで、制御点１０１１をＸ方向に移動することができる。同様に、ヒントプロセッサ４２２は、フォントプログラム４０２からロードされた命令を処理して、制御点１０１２の位置が接合１０１３の位置と実質上同じになるまで、制御点１０１２をＹ方向に移動することができる。
【００８２】
アウトライン１０００の他の特徴間の対応する接合点も同様に、識別され得る。アウトライン１０００上の追加の余分な制御点がアクセスされ得る。こうした追加の余分な制御点は、対応する接合点に移動され得る。単一の対角移動ではなく、余分な制御点をＸ方向およびＹ方向に別個に移動すると、対角移動がもたらし得る丸め誤差を減らすことができる。アウトライン１０００上の余分な制御点を対応する接合点に移動することによって、簡略化されたアウトライン１００２がもたらされ得る。したがって、表現される文字（「Ｈ」）の全体的な形状は保持され、レンダリング誤差の潜在的な源が取り除かれる。これによって、アウトライン１０００により近似するピクセルパターン、例えばピクセルパターン１００３をレンダリングする確率が高くなる。
【００８３】
以下の第３の疑似コード例は、アウトラインが余分な制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更することを容易にするために定式化されかつ／または実行され得るアルゴリズムを表している。この第３疑似コード例は、様々なプログラミング言語（ＴｒｕｅＴｙｐｅ（登録商標）など）で定式化され、対応するコンパイラまたはインタプリタ（ヒントプロセッサ４２２など）によって処理され得る。第３疑似コードの例では、記号「／＊」と「＊／」の間のテキストは、疑似コードによって実装される機能について記述するコメントを表す。
【００８４】
行５１：入力：目標、第１、最終
行５２：ｆｏｒ  第１から最後までの各制御点
行５３：    ｘ位置が目標のｘ位置と同じになるまで、点をｘ方向に移動する
行５４：    ｙ位置が目標のｙ位置と同じになるまで、点をｙ方向に移動する
行５５：ｅｎｄｆｏｒ
第３疑似コード例では、行５１で、入力値が受信される。行５１の実行は、余分な制御点のリスト、その余分な制御点の移動先の接合点を受信することを含む。行５３および５４は、余分な制御点のライン内のそれぞれの制御点について実行され得る。それぞれの制御点は、２つの別個の動きを受け、第１がＸ方向、第２がＹ方向の動きである。これによって、対角の動きに付随する丸め誤差の可能性が小さくなる。
【００８５】
上述の各実施形態を実施するヒンティング命令の小部分は、フォントプログラム（フォントプログラム４０２など）内に含まれ得る。これは、命令がピクセルパターンを体系的に最適化するように実施され得るので、有利である。さらにヒンティング命令の数は比較的に一定しており（すなわちそれは、ピクセル化が非最適であるタイプサイズの数に依存しない）、また最適化は、すべてのタイプサイズでの外観検査を必要としない。したがって、本発明の実施形態は、ヒントフォントに費やされるリソースを潜在的に大きく減らす自動ヒンティング機構内に含まれ得る。
【００８６】
図１１および以下の議論は、本発明が実施され得る適切なコンピューティング環境についての簡潔で一般的な説明を提供するためのものである。必須ではないが、本発明について、コンピュータシステムによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明する。一般に、プログラムモジュールは、特定のタスクを実施し、または特定のデータ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体などを含む。コンピュータ実行可能命令、関連するデータ構造体、およびプログラムモジュールは、本明細書で開示する諸方法の行為を実行するためのプログラムコード手段の例を表している。
【００８７】
図１１を参照すると、本発明を実施するための例示的なシステムが、処理装置１１２１、システムメモリ１１２２、ならびにシステムメモリ１１２３を含めて様々なシステム構成要素を処理装置１１２１に結合するシステムバス１１２３を含むコンピュータシステム１１２０の形の汎用コンピューティング装置を含んでいる。処理装置１１２１は、本発明の特徴を含めて、コンピュータシステム１１２０の特徴を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス１１２３は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを用いたローカルバスを含めて、複数タイプのバス構造のいずれかであり得る。システムメモリは、読出し専用メモリ（ＲＯＭ：ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）１１２４およびランダムアクセスメモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）１１２５を含む。起動時などにコンピュータ１１２０内の要素間で情報を転送する助けをする基本ルーチンを含む基本入出力システム（ＢＩＯＳ：ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１１２６は、ＲＯＭ１１２４内に格納され得る。フォントプログラム４０２の関数および命令は、それがフォントファイル４０１の他の部分から呼び出され得るように、ＲＡＭ１１２５内にロードされることができる。
【００８８】
コンピュータシステム１１２０は、磁気ハードディスク１１３９から読み出し、またそこに書き込むための磁気ハードディスクドライブ１１２７、取出し可能な磁気ディスク１１２９から読み出し、またはそこに書き込むための磁気ディスクドライブ１１２８、およびＣＤ−ＲＯＭや他の光媒体などの取出し可能な光ディスク１１３１から読み出し、またはそこに書き込むための光ディスクドライブ１１３０をも含み得る。磁気ハードディスクドライブ１１２７、磁気ディスクドライブ１１２８および光ディスクドライブ１１３０はそれぞれ、ハードディスクドライブインターフェース１１３２、磁気ディスクドライブインターフェース１１３３および光ディスクドライブインターフェース１１３４によってシステムバス１１２３に接続される。ドライブ、およびその関連のコンピュータ読取り可能媒体によって、コンピュータ実行可能命令、データ構造体、プログラムモジュール、およびコンピュータシステム１１２０のための他のデータの不揮発性の記憶域がもたらされる。本明細書で述べる例示的な環境は、磁気ハードディスク１１３９、取出し可能な磁気ディスク１１２９および取出し可能な光ディスク１１３１を使用しているが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなどを含めて、データを格納するための他のタイプのコンピュータ読取り可能媒体が使用され得る。
【００８９】
１つまたは複数のプログラムモジュールを含むプログラムコード手段は、ハードディスク１１３９、磁気ディスク１１２９、光ディスク１１３１、ＲＯＭ１１２４、あるいはオペレーティングシステム１１３５、１つまたは複数のアプリケーションプログラム１１３６、他のプログラムモジュール１１３７およびプログラムデータ１１３８を含むＲＡＭ１１２５内に格納され得る。ユーザは、キーボード１１４０、ポインティング装置１１４２、または他の入力装置（図示せず）、例えばマイク、ジョイスティック、ゲームパッド、スキャナなどによって、コンピュータシステム１１２０内にコマンドおよび情報を入力し得る。これらのおよび他の入力装置は、システムバス１１２３に結合された入出力インターフェース１１４６を介して処理装置１１２１に接続され得る。入出力インターフェース１１４６は、例えばシリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ユニバーサルシリアルバス（ＵＳＢ：ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ）インターフェース、電気電子技術者協会（「ＩＥＥＥ」：Institute of Electrical and Electronics Engineers）１３９４インターフェース（すなわちファイヤーワイヤーインターフェース）など、様々な可能なインターフェースのいずれかを論理的に表す。
【００９０】
モニタ１１４７および他の表示装置もまた、ビデオインターフェース１１４８を介してシステムバス１１２３に接続される。モニタ１１４７は、コンピュータシステム１１２０によって生成されるテキストを含めて、モノクロおよび／またはカラーのグラフィカルオブジェクトを表示することができる。例えばスピーカ、プリンタおよびスキャナなどの他の周辺装置（図示せず）もまた、コンピュータシステム１１２０に接続され得る。コンピュータシステム１１４７に接続されたプリンタは、コンピュータシステム１１２０によって生成されるテキストを含めて、モノクロおよび／またはカラーのグラフィカルオブジェクトを印刷することができる。
【００９１】
コンピュータシステム１１２０は、例えばオフィス規模または企業規模のコンピュータネットワーク、ホームネットワーク、イントラネットおよび／またはインターネットなどのネットワークに接続可能である。コンピュータシステム１１２０は、こうしたネットワークを介して、例えばリモートコンピュータシステム、リモートアプリケーションおよび／またはリモートデータベースなどの外部ソースとデータを交換することができる。
【００９２】
コンピュータシステム１１２０は、それが外部ソースからデータを受信し、かつ／または外部ソースにデータを送信するためのネットワークインターフェース１１５３を含む。図１１に示すように、ネットワークインターフェース１１５３は、リンク１１５１を介したリモートコンピュータシステム１１８３とのデータ交換を容易にする。ネットワークインターフェース１１５３は、１つまたは複数のソフトウェアおよび／またはハードウェアモジュール、例えばネットワークインターフェースカード、および対応するネットワークドライバインターフェース仕様（「ＮＤＩＳ：Ｎｅｔｗｏｒｋ  Ｄｒｉｖｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」）スタックなどを論理的に表し得る。リンク１１５１はネットワークの一部（イーサネット（登録商標）セグメントなど）を表し、リモートコンピュータシステム１１８３は、ネットワークのノードを表す。
【００９３】
同様に、コンピュータシステム１１２０は、それが外部ソースからデータを受信し、かつ／または外部ソースにデータを送信するための入出力インターフェース１１４６を含む。入出力インターフェース１１４６は、コンピュータシステム４２０が外部ソースからデータを受信し、かつ／またはそこにデータを送信するためのモデム１１５４（標準モデム、ケーブルモデム、デジタル加入者線（ＤＳＬ：ｄｉｇｉｔａｌ  ｓｕｂｓｃｒｉｂｅｒ  ｌｉｎｅ）モデムなど）に結合される。図１１に示したように、入出力インターフェース１１４６およびモデム１１５４は、リンク１１５２を介したリモートコンピュータシステム１１９３とのデータ交換を容易にする。リンク１１５２はネットワークの一部を表し、リモートコンピュータシステム１１９３は、ネットワークのノードを表す。
【００９４】
図１１は本発明に適したオペレーティング環境を表しているが、本発明の原理は、必要であれば適切な修正を伴って、本発明の原理を実施することができる任意のシステムで使用され得る。図４に示す環境は、例示的なものにすぎず、本発明の原理が実施され得る様々な環境の小さい一部でさえも表すものではない。
【００９５】
本発明によれば、例えばスケーリングモジュール４１９、ヒントプロセッサ４２２、およびスキャン変換モジュール４２４などのモジュール、ならびに例えばフォントファイル４０１、スケーリングされたグリフ４２１、ヒンティングされたグリフ４２６、およびピクセル化された表現４２７などの関連するプログラムデータは、コンピュータシステム１１２０に関連するコンピュータ読取り可能媒体のいずれかに格納され、そこからアクセスされ得る。こうしたモジュールの一部、および関連するプログラムデータの一部は、システムメモリ１１２２内に格納するために、オペレーティングシステム１１３５、アプリケーションプログラム１１３６、プログラムモジュール１１３７および／またはプログラムデータ１１３８内に含められ得る。
【００９６】
例えば磁気ハードディスク１１３９などの大容量記憶装置がコンピュータシステム１１２０に結合される場合、こうしたモジュールおよび関連するプログラムデータは、大容量記憶装置内に格納されることもできる。ネットワーク化された環境では、コンピュータシステム１１２０に関して述べたプログラムモジュールまたはその一部は、リモートコンピュータシステム１１８３および／またはリモートコンピュータシステム１１９３に関連するシステムメモリおよび／または大容量記憶装置などのリモートメモリ記憶装置内に格納され得る。こうしたモジュールの実行は、分散環境内で実施され得る。
【００９７】
本発明は、その精神または本質的な特徴から逸脱せずに、他の特定の形で実施することができる。説明した実施形態は、あらゆる面において、制約的ではなく、例示的なものにすぎないと見なされる。したがって、本発明の範囲は、上記の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の等価物の意味および範囲内にあるすべての変更は、その範囲内に包含される。
【図面の簡単な説明】
【００９８】
【図１】テキスト文字のアウトラインおよび対応するピクセルパターンの従来技術図である。
【図２】テキスト文字のアウトラインおよび対応するピクセルパターンの従来技術図である。
【図３】テキスト文字のアウトラインおよび対応するピクセルパターンの従来技術図である。
【図４】本発明の原理を実施するためのコンピュータアーキテクチャの図である。
【図５】アウトラインに制御点が欠けている場合にグラフィカルオブジェクトのアウトラインを動的に変更するための方法の例示的なフローチャートである。
【図６】アウトライン、および本発明の原理を実施することによってもたらされる対応するピクセルパターンを示す図である。
【図７Ａ】アウトラインがグリッド位置のほぼ中心に制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更するための方法の例示的なフローチャートである。
【図７Ｂ】アウトラインが不正確な位置に制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更するための方法の例示的なフローチャートである。
【図８】アウトライン、および本発明の原理を実施することによってもたらされる対応するピクセルパターンを示す図である。
【図９】アウトラインが余分の制御点を含む場合にグラフィカルオブジェクトのアウトラインを動的に変更するための方法の例示的なフローチャートである。
【図１０】アウトライン、本発明の原理を実施することによってもたらされる対応する簡略化されたアウトライン、および対応するピクセルパターンを示す図である。
【図１１】本発明の原理を実施するのに適したオペレーティング環境の図である。
【符号の説明】
【００９９】
４０１  フォントファイル
４０２  フォントプログラム
４０３  ＣＶＴプログラム
４０４  グリフセット
４０６  グリフ
４０７  制御点
４０８  ヒント
４１６  コンピューティングシステム
４１７  アプリケーションプログラム
４１８  レンダリングコマンド
４１９  スケーリングモジュール
４２１  スケーリングされたグリフ
４２２  ヒントプロセッサ
４２４  スキャン変換モジュール
４２６  ヒンティングされたグリフ
４２７  ピクセル化された表現
４２８  出力装置
４３３  スケーリングされたアウトライン
４４１  マスタアウトライン
６００  アウトライン
６０３  ピクセルパターン
６１１  制御点
６１２  制御点
６２１  距離
６２２  距離
６３１  制御点
６３２  制御点
６３３  制御点
６３４  制御点
６４１  ストローク
６４２  中心線
８００  アウトライン
８０３  ピクセルパターン
８１１  制御点
８１２  制御点
８３１  制御点
８３２  制御点
８４１  エッジ
８４２  エッジ
１０００  アウトライン
１００２  簡略化されたアウトライン
１００３  ピクセルパターン
１０１１  制御点
１０１２  制御点
１０１３  接合
１０１６  ストローク
１０１７  ストローク
１１２１  処理装置
１１２２  システムメモリ
１１２３  システムバス
１１３２  ハードディスクドライブインターフェース
１１３３  磁気ディスクドライブインターフェース
１１３４  光ディスクドライブインターフェース
１１３５  オペレーティングシステム
１１３６  アプリケーションプログラム
１１３７  他のプログラムモジュール
１１３８  プログラムデータ
１１４６  入出力インターフェース
１１４７  モニタ
１１４０  キーボード
１１４８  ビデオアダプタ
１１５３  ネットワークインターフェース
１１５４  モデム
１１８３  リモートコンピュータ
１１９３  リモートコンピュータ
【図１】
2006018811.tif 000003
【図２】
2006018811.tif 000004
【図３】
2006018811.tif 000005
【図４】
2006018811.tif 000006
【図５】
2006018811.tif 000007
【図６】
2006018811.tif 000008
【図７Ａ】
2006018811.tif 000009
【図７Ｂ】
2006018811.tif 000010
【図８】
2006018811.tif 000011
【図９】
2006018811.tif 000012
【図１０】
2006018811.tif 000013
【図１１】
2006018811.tif 000014
【外国語明細書】
2006018811000001.pdf