(57)【要約】  本発明の原理は、フォントヒンティング言語の制約を反復的に解決することに関する。コンピューティングシステムは、本来フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約にアクセスし、このより複雑な制約は、アウトラインの少なくとも一部を制約する（２０１）。コンピューティングシステムは、より複雑な制約を、本来はフォントヒンティング言語の語彙に基づいて表すことが可能な複数のより単純な制約に分解する（２０２）。コンピュータシステムは、反復的に処理することによってひとつのソリューションをより複雑な制約に少なくとも近似させる、対応フォントヒンティング言語命令で、より単純な制約の各々を表す（２０３）。フォントヒンティング言語命令は、当該コンピューティングシステムまたは他のコンピューティングシステムで反復的に処理され、グラフィカルオブジェクトを、特定の許容差内でより複雑な制約に従わせる。
2007527029.tif 000002
【特許請求の範囲】
【請求項１】
グラフィカルオブジェクトのアウトラインを生成するための１組の制御ポイントに対するアクセス権を有するコンピューティングシステムにおいて、前記アウトラインを利用することにより前記グラフィカルオブジェクトがどのようにレンダリングされるかを判定し、前記アウトラインのある部分の位置は所定の位置に制約される可能性があり、フォントヒンティング言語を使用することにより制約の反復的なソリューションを表す方法であって、
本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約にアクセスするステップであって、前記より複雑な制約は、前記アウトラインの少なくとも一部を制約するステップと、
前記より複雑な制約を、本来は前記フォントヒンティング言語の語彙に基づいて表すことができる複数のより単純な制約に分解するステップと、
前記より単純な制約の各々を対応するフォントヒンティング言語命令で表すステップであって、該フォントヒンティング言語命令を反復的に処理することにより、１つのソリューションを前記より複雑な制約に少なくとも近似させるステップと、
を具備したことを特徴とする方法。
【請求項２】
前記本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約にアクセスするステップは、べき乗関数または指数関数に基づく制約にアクセスするステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項３】
前記本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約にアクセスするステップは、複数の制御ポイントを同時に移動する必要がある制約にアクセスするステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項４】
前記本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約にアクセスするステップは、循環的に依存する制約にアクセスするステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項５】
前記より複雑な制約を、複数のより単純な制約に分解するステップは、べき乗関数または指数関数に基づく制約をべき級数の複数の部分に分解するステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項６】
前記より複雑な制約を、複数のより単純な制約に分解するステップは、複数の制御ポイントを同時に移動することが必要な制約を、それぞれが個々の制御ポイントを移動する複数の制約に分解するステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項７】
前記より複雑な制約を、複数のより単純な制約に分解するステップは、循環的に依存する制約を、少なくとも、
第１の制御ポイントの位置を制約する第１の制約であって、該第１の制約に従うことは、第２の制御ポイントの位置に依存する第１の制約と、
前記第２の制御ポイントの位置を制約する第２の制約であって、該第２の制約に従うことは、前記第１の制御ポイントの位置に依存する第２の制約と、
に分解するステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項８】
前記より単純な制約の各々を対応するフォントヒンティング言語命令で表すステップであって、該フォントヒンティング言語命令を反復的に処理することにより、１つのソリューションを前記より複雑な制約に少なくとも近似させるステップは、前記より単純な制約の各々をＴｒｕｅＴｙｐｅ（登録商標）命令で表すステップを有する、ことを特徴とする請求項１に記載の方法。
【請求項９】
前記アウトラインの少なくとも一部を変更してより複雑な制約に従うことができるように、前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップと、
少なくとも特定の許容差内で、前記より複雑な制約に従う前記グラフィカルオブジェクトのアウトラインを生成するステップと、
前記アウトラインに基づいて出力デバイスでレンダリングするための、前記グラフィカルオブジェクトのピクセル表現を生成するステップと、
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１０】
フォントヒンティング言語命令を処理するように構成したコンピューティングシステムにおいて、グラフィカルオブジェクトを適切にレンダリングできるように、制約を反復的に解決するためのコンピュータによる方法であって、
複数のより単純な制約を表すフォントヒンティング言語命令を受け取るステップであって、前記複数のより単純な制約は、本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約に対応するステップと、
グラフィカルオブジェクトを変更してより複雑な制約に従うことができるように、前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップと、
を具備したことを特徴とする方法。
【請求項１１】
前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップは、べき級数の部分を表すフォントヒンティング言語命令を反復的に処理するステップを有する、ことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップは、個々の制御ポイントを移動するフォントヒンティング言語命令を反復的に処理するステップを有する、ことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップは、
第１の制御ポイントの現在の位置に基づいて第１のより単純な制約を適用することにより、第２の制御ポイントのターゲット位置を計算するステップと、
前記第２の制御ポイントの現在の位置に基づいて第２のより単純な制約を適用することにより、前記第１の制御ポイントのターゲット位置を計算するステップと、
前記第１の制御ポイントの前記ターゲット位置が、前記第１の制御ポイントの現在の位置から特定の許容差内にあることを判定するステップと、
前記第２の制御ポイントのターゲット位置が、前記第２の制御ポイントの現在の位置から特定の許容差内にあることを判定するステップと、
を有することを特徴とする請求項１０に記載の方法。
【請求項１４】
前記第１の制御ポイントの前記ターゲット位置を、前記第１の制御ポイントの現在の位置にするステップと、
前記第２の制御ポイントの前記ターゲット位置を、前記第２の制御ポイントの現在の位置にするステップと、
をさらに有することを特徴とする請求項１３に記載の方法。
【請求項１５】
前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップは、指定された回数の反復が行われるまで、フォントヒンティング言語命令を反復的に処理するステップを有する、ことを特徴とする請求項１０に記載の方法。
【請求項１６】
前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップは、制御ポイントの位置が、より複雑な制約に従う閾値許容差内になるまでフォントヒンティング言語命令を反復的に処理するステップを有する、ことを特徴とする請求項１０に記載の方法。
【請求項１７】
前記フォントヒンティング言語命令を有限回反復的に処理することにより、ひとつのソリューションをより複雑な制約に少なくとも近似させるステップは、ＴｒｕｅＴｙｐｅ（登録商標）命令を反復的に処理するステップを有する、ことを特徴とする請求項１０に記載の方法。
【請求項１８】
前記より複雑な制約に従う前記グラフィカルオブジェクトのアウトラインを生成するステップと、
前記アウトラインに基づいて、出力デバイスでレンダリングするための前記グラフィカルオブジェクトのピクセル表現を生成するステップと、
をさらに有することを特徴とする請求項１０に記載の方法。
【請求項１９】
グラフィカルオブジェクトのアウトラインを生成するための１組の制御ポイントに対するアクセス権を有するコンピューティングシステム使用するコンピュータプログラムプロダクトであって、前記アウトラインを利用することにより前記グラフィカルオブジェクトがどのようにレンダリングされるかを判定し、前記アウトラインのある部分の位置は所定の位置に制約される可能性があり、前記コンピュータプログラムプロダクトは、フォントヒンティング言語を使用して制約に対する反復的なソリューションを表す方法を実施し、前記コンピュータプログラムプロダクトをプロセッサによって実行することにより、前記コンピューティングシステムに対して、
本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約にアクセスするステップであって、前記より複雑な制約は、前記アウトラインの少なくとも一部を制約するステップと、
前記より複雑な制約を、本来は前記フォントヒンティング言語の語彙に基づいて表すことができる複数のより単純な制約に分解するステップと、
前記より単純な制約の各々を対応するフォントヒンティング言語命令で表すステップであって、該フォントヒンティング言語命令を反復的に処理することにより、１つのソリューションを前記より複雑な制約に少なくとも近似させるステップと、
を行わせるコンピュータ実行可能命令を備える、ことを特徴とするコンピュータプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィカルオブジェクト(graphical object)のアウトライン(outline)を生成するために使用される制御データ(control data)を操作(manipulate)するシステムおよび方法に関する。より詳細には、本発明は、フォントヒンティング言語(font-hinting language)の制約(constraint)を反復的(iteratively)に解決(solve)するシステムおよび方法に関する。
【背景技術】
【０００２】
コンピューティング技術により、我々の仕事と遊びの形は変容した。今日のコンピューティングシステムは、デスクトップコンピュータ、ラップトップコンピュータ、タブレットＰＣ、携帯情報端末（ＰＤＡ）などの様々な形態をとっている。家電機器（冷蔵庫、オーブン、ミシン、セキュリティシステムなど）までもが様々な程度の処理能力を備え、そのためコンピューティングシステムと考えることができる。今後は、従来は処理能力を持たなかった複数のデバイスに処理能力が組み込まれる可能性がある。したがって、コンピューティングシステムの多様性は増していくものと予想される。
【０００３】
人間とのインターフェースをとるコンピューティングシステムのほぼ大半は、ディスプレイを使用して情報を伝達する。多くの場合、ディスプレイの魅力は、コンピューティングシステムの重要な属性の１つと考えられる。従来は、テキスト情報（例えばラテン語を基にした文字）が、ブラウン管（「ＣＲＴ」）ディスプレイデバイスのセルに表示されていた。各セルは、等しい大きさのグリッドに分割され、各グリッド位置がオンまたはオフにされる。例えば、ＣＲＴの各セルを８×８のグリッドとした場合、１つのセルにつき６４個のグリッド位置を得ることができる。
【０００４】
ある文字セット(character set)の１つ１つの文字(character)は、ＣＲＴディスプレイデバイスのハードウェア（例えばビデオアダプタ）にメモリイメージ（ビットマップ）として記憶される。メモリイメージ(memory image)は、複数のバイナリ値(binary value)（例えば、８×８のグリッドで１文字を表示するには６４個のバイナリ値）を含み、各バイナリ値は、指定されたグリッド位置(specified grid position)に対応する。ある値（例えばバイナリの「１」）は、その文字が表示される時に、対応するグリッド位置が「オン」にされることを表し、別の値（例えばバイナリの「０」）は、その文字が表示される時に、対応するグリッド位置が「オフ」にされることを表す。文字を表すバイナリデータ（ビットマップ）を受け取ると、ＣＲＴは、バイナリ１に対応するグリッド位置を「オン」にし、バイナリ０に対応するグリッド位置を「オフ」にして、その文字を表示する。
【０００５】
より最近では、一部のコンピューティングシステムは、表示される文字に応じてセルのサイズが異なるプロポーショナルビットマップ(proportional bit-map)（例えばディスクに記憶される）を使用している。例えば、プロポーショナルビットマップの文字セットでは、文字「ｉ」に対応するセル（３グリッド位置分の幅）は、文字「ｈ」のセル（６グリッド位置分の幅）よりも狭くすることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、文字をビットマップ（固定ビットマップ、またはプロポーショナルビットマップ）として記憶するには、相当のコンピューティングシステムリソースを消費する可能性がある。コンピューティングシステムは、１つのフォントの文字（通例は２５６文字あるいはそれ以上の異なる文字）を様々なサイズで表示および印刷する必要がある可能性があるので、相当数の異なるサイズのビットマップを記憶することを必要とされる場合がある。例えば、ワードプロセッサに、あるフォントの文字を４ｐｔから７２ｐｔにわたるサイズで表示および印刷させることが望ましい場合がある。したがって、そのワードプロセッサを実行するコンピューティングシステムは、可能性としては、そのフォントを様々なサイズで表示するために、６８個（７２−４）の異なるサイズのビットマップを記憶しなければならない。
【０００７】
さらに、プリンタは通例、ディスプレイとは異なる解像度（そして通例はディスプレイより高い解像度）を有するので、コンピューティングシステムは、可能性としては、そのフォントを様々なサイズで印刷するためにも、対応する６８個（７２−４）の異なるサイズのビットマップを記憶しなければならない。例えば、８×５グリッドのビットマップ（４０ビットの記憶を必要とする）を使用して、ある指定されたサイズで文字を表示するのに対し、その文字をその指定されたサイズで印刷するには、５０×３０のグリッド（１５００ビットの記憶を必要とする）が使用される。
【０００８】
このビットマップフォントに関連した必要記憶量の問題(storage requirement problem)は、コンピューティングデバイスが異なるフォントの文字を表示し、印刷する際に、さらに複雑になる。すなわち、コンピューティングデバイスは、各種の異なるフォントを各種の異なるサイズで表すためのビットマップを記憶する必要がある。したがって、上記の例では、５０の異なるフォントを使用するようにワードプロセッサを構成すると、異なるビットマップのセットは、優に５０００個を超える（（６８＋６８）×５０）。多くの文字セット(character set)は、２５６文字、あるいはそれ以上の文字を含んでいるので、結果として個々のビットマップは優に１００万を超える（５０００×２５６）。各フォントの下線付きのバージョン、太字バージョン、および／または斜体バージョンに対応するビットマップを記憶すると、さらに記憶要件が高くなる。さらに、多数のビットマップを手動で生成するには、きわめて時間がかかる。
【０００９】
そのため、さらに最近では、グラフィックプリミティブ(graphic primitive)を使用してあるフォントの文字を記述することが行われている。例えば、点と点を連結する（例えば直線、弧、ベジェ曲線などで連結する）ための制御ポイントと命令のセットを使用して、任意のグリッド空間（ピクセル型デバイスの最高の解像度より高い解像度の任意のグリッド空間）に文字のアウトラインを定義することができる。しばしば、文字は大きなサイズで記述された後に、より小さいサイズで（あるいは太字や斜体等で）レンダリングするべき際に数学的に縮小される（あるいはその他の方式で操作される）場合がある。したがって、（１つのフォントの）１つの文字に対して、少ない数の記述、可能性としては１つの記述だけが記憶されればよい。
【００１０】
文字を縮小するために、制御ポイントの位置(location of control point)を倍率(scaling factor)で割ることができる。例えば、１０分の１の倍率で文字を縮小するには、その文字を（より高い解像度で）定義する各制御ポイントの座標を１０で割ることができる。１００×１００のグリッドで表示するために文字を定義する制御ポイントが、１０×１０のグリッドで表示するために縮小される場合がある。したがって、グリッド位置（５０，３０）の制御ポイントをグリッド位置（５，３）の制御ポイントに縮小し、グリッド位置（７０，７０）の制御ポイントをグリッド位置（７，７）の制御ポイントに縮小することができる。したがって、その文字を表すより小さなアウトラインを計算することにより、その文字について異なるサイズのビットマップを複数記憶する必要性が低減する。
【００１１】
そして、より小さなアウトライン(smaller outline)を分析し、オンにされるべきグリッド位置を識別し、オフにされるべきグリッド位置を識別することができる（しばしば「スキャン変換(scan conversion)」と呼ばれるプロセス）。スキャン変換アルゴリズムの１つでは、グリッド位置の中心が、より小さなアウトラインの内側にあるか外側にあるかを判定する。グリッド位置の中心が小さなアウトラインの内側にある場合は、そのグリッド位置はオンにされる。それに対し、グリッド位置の中心がより小さなアウトラインの外側にある場合は、そのグリッド位置はオフにされる。
【００１２】
また、文字をレンダリングする際は、その文字の部分が１つまたは複数の制約に従うことが必要とされる場合がある。制約(constraint)は、１つまたは複数の独立したパラメータとの関係で１つまたは複数の従属するパラメータを定義するアルゴリズムとして表すことができる。ある制御ポイントについての制約(constraints for one control point)は、他の制御ポイントの位置またはグリッド上の位置（例えば、キャピタリゼーション線(capitalization line)）との関係で表されることができる。例えば、制御ポイント「Ｐ」の位置(position)は、ＰがＱから固定された距離(fixed distance)「ｃ」になるように、制御ポイント「Ｑ」の位置との関係で表すことができる。すなわち、Ｐ＝Ｑ＋ｃとなる。したがって、Ｑが移動(move)されると、Ｐが固定された距離ｃに従うように、それに対応するＰの移動が必要とされる。
【００１３】
一部には、様々なフォントの多種多様の美学的特徴および技術的特徴のために、制約は、個々のフォントに合わせて作られる。しばしば、制約は、限られた、きわめて固有の語彙を有するフォントヒンティング言語（ＴｒｕｅＴｙｐｅ（登録商標）言語など）で表される。この限られた、きわめて固有の語彙は、数学的概念をフォントヒンティング言語に変換することを簡略化する。例えば、フォントヒンティング言語は通例、代入演算子(assignment operator)（例えば「＝」）と加算演算子(addition operator)（例えば「＋」）を含むので、通常、上記の制約（Ｐ＝Ｑ＋ｃ）を変換(translate)することは容易である。
【００１４】
しかし、限られた、きわめて固有の語彙(specific vocabulary)では、表すことができる制約の種類を制限することがある。例えば、超越関数(transcendental function)などのより複雑な数学関数に基づく制約を表すことは、そうしたより複雑な数学関数がフォントヒンティング言語の語彙に含まれず、追加することが難しい場合があることから、困難である可能性がある。より複雑な数学関数（平方根関数など）がないと、制約に従うために適した制御ポイントの位置を決定することが難しくなる可能性がある。したがって、フォントヒンティング言語としてより複雑な語彙(more complex vocabulary)がない場合(lack)でも、フォントヒンティング言語の既存の語彙を使用して制約(constraint)を解決(solve)する機構(mechanism)があれば有利である。
【課題を解決するための手段】
【００１５】
前述の当技術分野における従来の状態に伴う問題は、フォントヒンティング言語における制約(constraints in afont-hinting language)を反復的に解決(iteratively solving)することを対象とする本発明の原理によって克服される。コンピューティングシステムは、本来(natively)はフォントヒンティング言語の語彙に基づいて表す(express)ことができないより複雑な制約にアクセスし、そのより複雑な制約は、アウトラインの少なくとも一部を制約する。コンピューティングシステムは、より複雑な制約を、本来はフォントヒンティング言語の語彙に基づいて表すことができる、複数のより単純な制約に分解(decompose)する。コンピュータシステムは、反復的に処理(iteratively process)することによってひとつのソリューション(a solution)をより複雑な制約(more complex constraint)に少なくとも近似(at least approximate)させる、対応フォントヒンティング言語命令(corresponding font-hinting language)で、より単純な制約(simpler constraint)の各々を表す。フォントヒンティング言語命令(font-hinting language instruction)は、当該コンピューティングシステムまたは別のコンピューティングシステムで反復的に処理することにより、グラフィカルオブジェクトを、少なくとも特定の許容差(specific tolerance)内でより複雑な制約に従わせる。
【００１６】
本発明のこの他の特徴および利点は、以下の説明で述べる。部分的にはその説明から明らかになるか、あるいは本発明の実施から理解できるであろう。本発明の特徴および利点は、特許請求の範囲に記載されている構成および組み合わせによって実現され、取得することができる。本発明のこれらの特徴およびその他の特徴は、以下の説明と特許請求の範囲からより完全に明らかになる。あるいは、以下に述べるように本発明を実施することによって理解できよう。
【発明を実施するための最良の形態】
【００１７】
本発明の上記利点およびその他の利点ならびに特徴を得る構成を説明するために、添付図面に示した具体的な実施形態を参照して説明していく。これらの図面は本発明の典型的な実施形態のみを示し、そのため本発明の範囲を限定すると考えるべきでない。その上で、添付図面を使用して本発明の実施形態をさらに具体的かつ詳細に説明する。
【００１８】
本発明の原理は、フォントヒンティング言語の制約を反復的に解決するシステム、方法、およびコンピュータプログラムプロダクトに関する。コンピューティングシステムは、グラフィカルオブジェクト（テキスト文字など）のアウトラインを大きなサイズ（例えば７２ポイント）で描写するデザイン１組の制御ポイントを受け取る。このデザイン１組の制御ポイントは、ヒントを伴わないか、あるいは、グラフィカルオブジェクトをより小さなサイズで表示するための基本的なヒントを含むことができる。デザイン１組の制御ポイントは、本来はフォントヒンティング言語の語彙に基づいて表されることができない、より複雑な制約に関連付けられることができる。例えば、デザイン１組の制御ポイントは、例えば、「Ｚ」の斜めのストロークのエッジを平行にすることを指示する制約などの、循環的に依存する制約に関連付けられることができる。
【００１９】
コンピューティングシステムは、本来はフォントヒンティング言語の語彙に基づいて表されることができないより複雑な制約にアクセスし、そのより複雑な制約は、少なくともアウトラインの一部を制約する。コンピューティングシステムは、そのより複雑な制約を分解して、本来はフォントヒンティング言語の語彙に基づいて表されることができる、複数のより単純な制約にする。コンピュータシステムは、その単純な各制約を対応するフォントヒンティング言語命令で表し、その命令が反復的に処理されて、より複雑な制約の解（ソリューション）を少なくとも近似することができる。フォントヒンティング言語命令は、当該コンピューティングシステムまたは別のコンピューティングシステムで反復的に処理されて、グラフィカルオブジェクトを特定の許容差内でより複雑な制約に従わせる。
【００２０】
本発明の範囲内の実施形態は、コンピュータ実行可能命令またはデータ構造を搬送する、またはそれらが記憶されたコンピュータ可読媒体を含む。そのようなコンピュータ可読媒体は、汎用または特殊目的のコンピューティングシステムからアクセス可能な任意の利用可能媒体でよい。限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭ、または他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気記憶デバイスなどの物理的な記憶媒体、あるいは、コンピュータ実行可能命令、コンピュータ可読命令、またはデータ構造の形で所望のプログラムコード手段を搬送または記憶するために使用することができ、汎用または特殊目的のコンピューティングシステムからアクセス可能な他の媒体を含むことができる。
【００２１】
この説明および特許請求の範囲において、「ネットワーク」とは、コンピューティングシステム間および／またはモジュール間で電子データの移送を可能にする１つまたは複数のデータリンクと定義される。ネットワークまたは別の通信接続（有線、無線、または有線と無線の組合せ）を通じて情報がコンピューティングシステムに転送または提供される場合、その接続は、適切にコンピュータ可読媒体とみなされる。したがって、そのような接続はいずれも、適切にコンピュータ可読媒体と称される。上記の媒体の組合せもコンピュータ可読媒体の範囲に含まれる。コンピュータ実行可能命令は、例えば、汎用コンピューティングシステムまたは特殊目的コンピューティングシステムに特定の機能または機能の群を行わせる命令およびデータからなる。コンピュータ実行可能命令は、例えば、２進表現、アセンブリ言語などの中間形式命令、あるいはソースコード等である。
【００２２】
この説明と頭記の特許請求の範囲で、「コンピューティングシステム」とは、協働して電子データに対する操作を行う、１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはそれらの組合せと定義される。例えば、コンピューティングシステムの定義には、パーソナルコンピュータのハードウェアコンポーネントと、パーソナルコンピュータのオペレーティングシステムなどのソフトウェアモジュールが含まれる。モジュールの物理的な配置は重要でない。コンピューティングシステムは、ネットワークを介して結合された１つまたは複数のコンピュータを含むことができる。同様に、コンピューティングシステムには、単一の物理的デバイス（携帯電話や携帯情報端末「ＰＤＡ」など）も含まれ、内部モジュール（メモリやプロセッサなど）が協働して電子データに対する操作を行う。
【００２３】
本明細書で使用される用語「モジュール(module)」または「コンポーネント(component)」は、コンピューティングシステムで実行されるソフトウェアオブジェクトまたはルーチンを指す。本明細書に記載される様々なコンポーネント、モジュール、エンジン、およびサービスは、コンピューティングシステムで（例えば独立したスレッドとして）実行されるオブジェクトまたはプロセスとして実施することができる。本明細書に記載されるシステムと方法は、ソフトウェアとして実施することが好ましいが、ソフトウェアおよびハードウェアとしての実施またはハードウェアとしての実施も可能である。
【００２４】
当業者にとって、本発明は、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサを利用した、あるいはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ページャなどの多種のコンピューティングシステム構成を備えるネットワークコンピューティング環境で実施されることができることを認識されよう。本発明は、ネットワークを通じて（有線のデータリンク、無線データリンク、または有線データリンクと無線データリンクの組合せにより）リンクされた、ローカルとリモートのコンピューティングシステムの両方がタスクを行う分散システム環境で実施することもできる。分散システム環境では、プログラムモジュールは、ローカルおよびリモート両方のメモリ記憶デバイスに置くことができる。
【００２５】
図１は、フォントヒンティング言語の制約を反復的に解決するコンピュータアーキテクチャ１００の一例を示す。コンピュータアーキテクチャ１００内で、コンピューティングシステム１１８は、ヒンティングモジュール１１９を含む。一般に、ヒンティングモジュール１１９は、グラフィカルオブジェクト（グラフィカルオブジェクト１３１）を表す１組の制御ポイント（デザイン制御ポイント１２２）を受け取る。それが適切な場合、ヒンティングモジュール１１９は、あるフォントヒンティング言語（例えばＴｒｕｅＴｙｐｅ（登録商標））のコンピュータ実行可能命令（以後「ヒント」と称する）を、１組の制御ポイントに含まれる制御ポイント（例えば制御ポイント１０１〜１０８）に割り当てる。このヒントがその後処理されて、グラフィカルオブジェクトのより適切なレンダリング（例えばより小さなサイズでのレンダリング）を行わせる。
【００２６】
ヒンティングモジュール１１９は、１組の制御ポイントによって表されるストローク、セリフなどの特徴を自動的に識別し、一組の制御ポイント中の制御ポイントに対する制約を自動的に識別するいくつかのモジュールを含むことができる。例えば第１の制御ポイントを第２の制御ポイントからある水平方向の距離に制限するなどの一部の制約は、フォントヒンティング言語の既存の語彙を使用して容易に実施することができる。しかし、より複雑な数学関数を必要とする制約などの他の制約は、フォントヒンティング言語の既存の語彙を使用して（実施されることが可能であるとして）容易に実施すことができない。例えば、あるフォントヒンティング言語の既存の語彙に平方根関数がない場合は、斜めのエッジに関係する距離の制約を直接計算することが難しい（あるいは不可能である）可能性がある。
【００２７】
制約識別モジュール(constraint identification module)１２１は、デザイン制御ポイント(design control point)１２２に含まれる制御ポイントの位置または基本ヒント(basic hint)に基づいて、他の方法では解決することが難しい制約を含む制約を識別することができる。基本ヒント(basic hint)とは、グラフィカルオブジェクトを大きなサイズ（対象デバイスで７２ポイントなど）でレンダリングするためのヒントであるが、グラフィカルオブジェクトを他のサイズで（対象デバイスで１２ポイントなど）レンダリングする際には一般には適用することができないヒントである。例えば、基本ヒントは、「Ｔ」の縦のストロークの幅を、特定の対象デバイスで７２ポイントでレンダリングする場合には６ピクセルに制約することができる。しかし、同じ６ピクセルの制約をより小さなサイズで実施することは、特定の対象デバイスにより小さなサイズでレンダリングする際にはグラフィカルオブジェクト自体の幅が６ピクセルですらない可能性があるので、あまり意味がない。したがって、ヒンティングモジュール１１９は、制約を、グラフィカルオブジェクトが表示されるサイズと解像度に基づかせる制約式を生成することができる。例えば、ヒンティングモジュール１１９は、「Ｔ」の縦のストロークの制約を、「Ｔ」がレンダリングされるポイントサイズの１２分の１にするように設定することができる。
【００２８】
ポイントサイズの１２分の１に相当するピクセル数は、対象デバイスの解像度に応じて異なる可能性がある。例えば３００ドット／インチ（「ｄｐｉ」）のプリンタなど解像度が高いデバイスでは、ポイントサイズの１２分の１は、より多い数のピクセルに相当する可能性がある。一方、９６ｄｐｉのモニタなど解像度の低いデバイスでは、ポイントサイズの１２分の１は、より少ない数のピクセルに相当する可能性がある。
【００２９】
ヒントアプリケーションモジュール１２９は、デザイン制御ポイント１２２にヒント（例えばＴｒｕｅＴｙｐｅ（登録商標）命令）を追加して、後にグラフィカルオブジェクトがレンダリングされる際にその制約を実施することができる。例えば、除算演算子を使用して、「Ｔ」の縦のストロークに対する幅の制約を実施することができる（ストローク幅＝ポイントサイズ／１２）。ヒントアプリケーションモジュール１２９は、より複雑な数学関数を必要とする制約など、他の複雑な制約を反復的に解決するためのヒントを含むことができる。後にグラフィカルオブジェクトをレンダリングする際に、コンピューティングシステムは、そのヒントを処理して、例えばグラフィカルオブジェクトが表示されるサイズに基づいて反復的に制約を解決することができる。
【００３０】
コンピューティングシステム１２３は、スケーリングモジュール１２４、ヒントプロセッサ１３４、およびスキャン変換モジュール１２６を含む。スケーリングモジュール１２４は、より大きなサイズにおけるグラフィカルオブジェクトのアウトラインを表す、ヒントを伴う１組の制御ポイント（制御ポイント１３２など）を受け取ることができる。ヒントを伴う制御ポイントは、ネットワーク接続を介して受け取られるか、例えば磁気ディスクや光ディスクなどのコンピュータ可読媒体からロードされる。スケーリングモジュール１２４は、グラフィカルオブジェクトがより小さなサイズまたは大きなサイズでレンダリングできるように、制御ポイントの位置を拡大縮小することができる。
【００３１】
ヒントプロセッサ(hint processor)１３４は、グラフィカルオブジェクトが小さなサイズでより適切にレンダリングされるように、ヒントを伴う１組の制御ポイントに関連付けられたヒントを処理する（可能性としては、さらに、縮小された制御ポイントの位置を変更する）。例えば、ヒントプロセッサ１３４は、フォントヒンティング言語のコンピュータ実行可能命令を処理して、より複雑な制約を反復的に解決することができる。スキャン変換モジュール(scan conversion module)１２６は、対応するピクセルグリッドのピクセル（またはサブピクセル）をオンまたはオフにして、グラフィカルオブジェクトのピクセル表現を生成する。
【００３２】
したがって、より複雑な数学関数を含むようにフォントヒンティング言語または対応するヒントプロセッサを変更する必要なく、より複雑な制約を実施するためのヒントを１組の制御ポイントに関連付けられることができる。したがって、コンピューティングシステムは、既存のコンポーネントを利用して、より複雑な制約に従う方式でグラフィカルオブジェクトをレンダリングすることができる。フォントヒンティング言語の語彙および／またはヒントプロセッサの機能性を変更することは、既存のフォントヒンティング言語の語彙を使用してグラフィカルオブジェクトにヒントを作成することに比べて著しく難しく、時間を要する可能性があるため、これは有利である。
【００３３】
図２Ａは、フォントヒンティング言語の制約を反復的に解決する例示的方法２００のフローチャートを示す。方法２００については、コンピュータアーキテクチャ１００中のコンピューティングシステム、モジュール、および制御ポイントとの関係で説明していく。方法２００は、本来はフォントヒンティング言語の語彙に基づいて表されることができないより複雑な制約にアクセスする動作を含む（動作２０１）。例えば、ヒンティングモジュール１１９は、デザイン制御ポイント１２２中に表されたより複雑な制約（を識別し）、その制約にアクセスすることができる。ヒンティングモジュール１１９および／またはヒントプロセッサ１３４によって利用されるフォントヒンティング言語は、制御ポイント１２２からアクセスされるより複雑な制約を表す語彙を持たない可能性がある。
【００３４】
より複雑な制約とは、例えば、べき乗関数または指数関数（ＸＹ）で表される制約、複数の循環的に依存する制約、または複数の制御ポイントを同時に移動することを必要とする制約等である。ただし、このより複雑な制約のリストは、完全なものではない。当業者には、この説明を検討すると、ここに明示的に記載される制約以外の他のより複雑な制約がアクセスされることができることが明らかになろう。
【００３５】
循環的に依存する制約に関しては、第１の制約に従うことは、第１の制御ポイントの位置に依存する可能性がある。例えば、制約識別モジュール１２１は、制御ポイント１０７が、エッジ１１７から斜め方向の距離１１４に制約されることを識別することができる。制御ポイント１０２との関係で制御ポイント１０３の位置を移動すると斜め方向の距離１１４の方向が変化するので、斜め方向の距離１１４への一致は、制御ポイント１０３の位置に依存する。
【００３６】
第２の制約に従うことは、第２の制御ポイントの位置に依存する可能性がある。例えば、制約識別モジュール１２１は、制御ポイント１０３が、エッジ１１６から斜め方向の距離１１４に制約されることを識別することができる。制御ポイント１０６との関係で制御ポイント１０７の位置を変更すると斜めの距離１４４の方向が変わるため、斜め方向の距離１４４への一致は、制御ポイント１０７の位置に依存する。
【００３７】
このように、第１および第２の制約の結果循環的な依存関係が生じ、ここで制御ポイント１０７の斜めの距離１１４への一致は、制御ポイント１０３に依存し、制御ポイント１０３の斜めの距離１４４への一致は、制御ポイント１０７に依存する。制約識別モジュール１２１は、この循環的な依存関係を識別することができる。
【００３８】
方法２００は、より複雑な制約を、フォントヒンティング言語の語彙に基づいて本来は表すことが可能な、複数のより単純な制約に分解する動作を含む（動作２０２）。例えば、ヒンティングモジュール１１９は、デザイン制御ポイント１２２からアクセスされるより複雑な制約を、ヒンティングモジュール１１９および／またはヒントプロセッサ１３４によって利用されるフォントヒンティング言語で表すことができる、複数のより単純な制約に分解することができる。
【００３９】
より複雑な制約の分解は、より複雑な制約の複雑性を低減するいくつかの機構のいずれも含むことができる。例えば、循環的に依存する制約は、複数の循環的に依存しない制約に分解されることができる。指数関数またはべき乗関数に基づく制約は、べき級数に分解することができる。複数の制御ポイントを同時に移動することを必要とする制約は、それぞれが単一の制御ポイントに対応する複数の制約に分解することができる。他のより複雑な制約も、対応する複数のより単純な制約に分解されることができる。
【００４０】
方法２００は、
反復的に処理することによってひとつの解（ソリューション）をより複雑な制約に少なくとも近似させる、対応フォントヒンティング言語命令で、より単純な制約の各々を表す（動作２０３）。例えば、ヒンティングモジュール(hinting module)１１９は、より単純な制約(simpler constraint)を、ヒントプロセッサ(hint processor)１３４で反復的に処理(iteratively process)することが可能な例えばＴｒｕｅＴｙｐｅ（登録商標）命令などのフォントヒンティング言語命令で表すことができる。
【００４１】
循環性依存制約(circularly dependent constraint)に関して、より単純な制約を表すことは、第１の制御ポイントの現在の位置に基づいて第１の制約を適用して第２の制御ポイントのターゲット位置を計算するフォントヒンティング言語命令を生成することを含むことができる。例えば、ヒントプロセッサ１３４は、（縮小した後の）制御ポイント１０３の現在の位置に基づいて斜めの距離１１４を計算して制御ポイント１０７のターゲット位置を計算する命令を生成することができる。同様に、より単純な制約を表すことは、第２の制御ポイントの現在の位置に基づいて第２の制約を適用して、第１の制御ポイントのターゲット位置を計算するフォントヒンティング言語命令を生成することを含むことができる。例えば、ヒントプロセッサ１３４は、（縮小した後の）制御ポイント１０７の現在の位置に基づいて斜めの距離１４４を計算して、制御ポイント１０３のターゲット位置を計算する命令を生成することができる。
【００４２】
第１および第２の制約を表す、生成された命令の適用は、交互にすることができる。例えば、第１の制約を適用し、第２の制約を適用し、再び第１の制約を適用し、第２の制約を適用さすこと等ができる。第１の制約と第２の制約の交互の適用は、制御ポイントの位置が適切になるまで継続することができる。
【００４３】
したがって、より単純な制約をフォントヒンティング言語命令で表すことは、第２の制御ポイントのターゲット位置が、第２の制御ポイントの現在の位置から指定された許容差内にあることを判定するフォントヒンティング言語命令を生成することも含むことができる。例えば、ヒンティングモジュール１３４は、制御ポイント１０７のターゲット位置が、制御ポイント１０７の現在の位置から指定された許容差内にあることを判定するフォントヒンティング言語命令を生成する。指定された許容差は、ピクセル単位またはピクセルの何分の一単位（１ピクセルの１／６４など）の距離とすることができる。同様に、フォントヒンティング言語命令でより単純な制約を表すことは、第１の制御ポイントのターゲット位置が、第１の制御ポイントの現在の位置から指定された許容差内にあることを判定するフォントヒンティング言語命令を生成することを含むことができる。例えば、ヒンティングモジュール１３４は、制御ポイント１０３のターゲット位置が、制御ポイント１０３の現在の位置から指定された許容差内にあることを判定するフォントヒンティング言語命令を生成することができる。
【００４４】
べき乗関数に基づくより複雑な制約に関しては、より単純な制約を表すことは、べき級数を解くフォントヒンティング言語命令を生成することを含むことができる。複数の制御ポイントを同時に移動することを必要とする制約に関しては、より単純な制約を表すことは、制御ポイントを個々に移動するフォントヒンティング言語命令の生成を含むことができる。この他のタイプのより複雑な制約に対応するより単純な制約を表すことは、それに応じた適切なフォントヒンティング言語命令を生成することも含むことができる。
【００４５】
ある実施形態において、複数のより単純な制約を表すフォントヒンティング言語命令は、そのフォントヒンティング言語命令を生成したコンピューティングシステムで処理される。例えば、ヒンティングモジュール１１９は、以前にヒンティングモジュール１１９で生成されたフォントヒンティング言語命令（例えば制御ポイント１３２に関連付けられた）を処理することができる。他の実施形態では、複数のより単純な制約を表すフォントヒンティング言語命令は、処理のために別のコンピューティングシステムに転送される。例えば、コンピューティングシステム１１８は、フォントヒンティング言語命令（例えば制御ポイント１３２に関連付けられた）を処理するためにコンピューティングシステム１２３に転送することができる。
【００４６】
図２Ｂは、フォントヒンティング言語の制約を反復的に解決する例示的方法２５０のフローチャートを示す。方法２５０については、コンピュータアーキテクチャ１００中のコンピューティングシステム、モジュール、および制御ポイントとの関係で説明していく。方法２５０は、複数のより単純な制約を表すフォントヒント命令を生成するコンピューティングシステム（例えばコンピューティングシステム１１８）、または、複数のより単純な制約を表す、生成されたフォントヒント命令を受け取るコンピューティングシステム（例えばコンピューティングシステム１２３）で行うことができる。
【００４７】
方法２５０は、本来はフォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約に対応する、複数のより単純な制約を表すフォントヒンティング言語命令にアクセスする動作を含む（動作２５１）。例えば、ヒンティングモジュール１１９は、制御ポイント１３２に関連付けられたより複雑な制約に対応する、複数のより単純な制約を表すフォントヒンティング言語命令（例えばＴｒｕｅＴｙｐｅ（登録商標）命令）にアクセスすることができる。同様に、ヒントプロセッサ１３４も、制御ポイント１３２に関連付けられたより複雑な制約に対応する、複数のより単純な制約を表すフォントヒンティング言語命令（例えばＴｒｕｅＴｙｐｅ（登録商標）命令）にアクセスすることができる。
【００４８】
方法２５０は、２５２グラフィカルオブジェクトを変更してより複雑な制約に従うことができるように、アクセスされたフォントヒンティング言語命令を有限回反復的に処理することにより、ひとつの解（ソリューション）をより複雑な制約に少なくとも近似させる（動作２５２）。例えば、それが適切であるとされる場合、ヒンティングモジュール１１９またはヒントプロセッサ１３２は、フォントヒンティング言語命令を反復的に処理することにより、ある解（ソリューション）をより複雑な制約に少なくとも近似させることができる。
【００４９】
複数の制御ポイントを同時に移動することを必要とするより複雑な制約に関して、ヒンティングモジュール１１９またはヒントプロセッサ１３２は、すべての制御ポイントが移動されるまで、個々の制御ポイントを移動する（個々の制御ポイントの移動が１回の反復とみなされる）複数のフォントヒンティング言語命令を処理する。指数関数またはべき乗関数を含む制約に関しては、ヒンティングモジュール１１９またはヒントプロセッサ１３２は、各部分が処理されるまで、べき級数の部分（各部分の処理が１回の反復とみなされる）を表す複数のフォントヒンティング言語命令を処理する。部分的には、より複雑な制約の種類と複雑な制約を分解する方式に基づいて、より単純な１つの制約を表すフォントヒンティング言語命令の指定された部分の処理を、１回の反復とみなすことができる。
【００５０】
循環的に依存する制約に関しては、制御ポイントの位置が、制約に従った閾値許容差内になるまで、または指定回数の反復が行われるまで、反復を継続することができる。例えば、制御ポイント１０３および１０７のターゲット位置が、それぞれ対応する制御ポイント１０３および１０７の現在の位置から指定された許容差内にある場合、制御ポイント１０３および１０７の現在の位置は、十分に正確であるとみなされる。これに対し、制御ポイント１０３および１０７のターゲット位置のいずれかが、それぞれ対応する制御ポイント１０３および１０７の現在の位置から指定の許容差内にない場合は、制御ポイント１０３および１０７の現在の位置は、十分に正確ではないとみなされる。
【００５１】
現在の位置が十分に正確でない場合、制御ポイント１０３および１０７の現在の位置は、それぞれ制御ポイント１０３および１０７の計算されたターゲット位置に等しくなるように設定される。（計算されたターゲット位置を現在の位置として使用して）第１および第２の制約が再度適用されて、制御ポイント１０３および１０７の第２のターゲット位置を計算する。すなわち、計算されたターゲット位置を使用して第２のターゲット位置を反復する。以前の計算で計算されたターゲット位置を新しい計算のための現在の位置として反復的に使用する（例えば第３のターゲット位置を反復するために第２のターゲット位置を現在の位置として使用する）ことについては、ある反復のために計算されたターゲット位置が、現在の位置から指定の許容差内になるまで継続することができる。あるいは、反復的な計算は、閾値回数の反復が行われるまで継続することもできる。例えば、ループ命令で、１０回反復されると反復が停止するように指示することができる。
【００５２】
次の擬似コード(pseudo-code)は、反復的に制約を解決することを容易にするために生成および／または実行することができるアルゴリズムの一例を表す。この擬似コード例において、Ｐ１は、制御ポイント１３２が縮小され、ヒントに従った後の制御ポイント１０７の位置を表し、Ｐ２は、制御ポイント１０６の位置を表す。同様に、この擬似コード例では、Ｑ１は、制御ポイント１３２が縮小され、ヒントに従った後の制御ポイント１０２の位置を指し、Ｑ２は、制御ポイント１０３の位置を指す。この擬似コードのアルゴリズムは、各種のフォントヒンティング言語で生成され、対応するヒントプロセッサ（ヒントプロセッサ１３４など）によって処理することができる。この擬似コード例の中で、セミコロン（「；」）の後のテキストは、その擬似コードによって実施される機能を説明するコメントを表す。
【００５３】
ライン１：ｎ＝反復回数                ；カウンタを初期化
ライン２：Ｐ１’＝Ｐ１                  ；Ｐ１の現在の位置を記憶
ライン３：Ｑ２’＝Ｑ２                  ；Ｑ２の現在の位置を記憶
ライン４：Ｐ１←Ｑ１Ｑ２＋ｃ            ；Ｑ２がターゲット位置にあるものとして制約を実行
ライン５：Ｑ１←Ｐ２Ｐ１＋ｃ            ；Ｐ１がターゲット位置にあるものとして制約を実行
ライン６：ｎ←ｎ−１                  ；カウンタをデクリメント
ライン７：ｎ＝０？                    ；閾値回数の反復が行われたか？
Ｙｅｓの場合はライン１０へ、
Ｎｏの場合は次へ進む。
【００５４】
ライン８：｜Ｐ１−Ｐ１’｜＜１／６４？  ；Ｐ１とＰ１’の距離が許容差内か？
Ｎｏの場合はライン２へ、
Ｙｅｓの場合は次へ進む。
【００５５】
ライン９：｜Ｑ２−Ｑ２’｜＜１／６４？  ；Ｑ２とＱ２’の距離が許容差内か？
Ｎｏの場合はライン２へ、
Ｙｅｓの場合は次へ進む。
【００５６】
ライン１０：終了
この擬似コードの例で、ライン４は、実行されると例えば斜めの距離１１４などの第１の制約を適用し、ライン５は、実行されると例えば斜めの距離１４４などの第２の制約を適用する。一部の実施形態では、ライン４および５に表される機能がさらに精緻化される。
【００５７】
例えば、ライン４では、Ｐ１が、エッジＱ１Ｑ２から垂直に測定された距離ｃによって制約される。このような精緻化された実施形態では、この制約は２つの部分に分割される。距離の部では、Ｐ１が、距離ｃに従うように移動される。その後、別個の角度の部で、Ｑ２が、エッジＰ１Ｐ２とエッジＱ１Ｑ２の間にその角度を再度確立するのに十分な量だけ移動される。すなわち、それらのエッジが平行になることが意図される場合、それらのエッジは、角度の部を実行すると再度平行になる。角度の部に従うようにＱ２を移動すると、距離の部との不一致が追加的に生じる可能性がある。しかし、より多くの反復が行われると、角度の部に従うようにＱ２を移動した結果生じる距離の部との追加的な不一致の量は、次第に小さくなる（そしていくらかの回数の反復を行うと、基本的に無視できる量になることができる）。
【００５８】
ライン５において、同様の「再平行化(re-parallelization)」を行うことができる。初めに、この制約の距離の部と一致するようにＱ１が移動され、次いで、この制約の角度の部と一致するようにＰ１が移動される。こうした精緻化された実施形態は、制約を持つストロークを真似るような方式で、利用可能な制御ポイントを制約することを容易にし、この制約には、ストロークのエッジとエッジの間の角度に制約を課すことが含まれることができる。したがって、このような精緻化された実施形態は、利用可能な制御データが、制御ポイントをどのように連結するか（線、ベジェ曲線など）の命令と併せて制御ポイントを含むが、それらのストロークを明確には表さない場合に、ストロークに制約を加えるのに有利である。
【００５９】
ライン７は、指定された閾値回数の反復が行われたかどうかを判定するチェックを行う。指定された閾値回数の反復が行われている場合、このアルゴリズムは（十分に正確な制約の解（ソリューション）が計算されていなくとも）終了する。一方、指定された閾値回数の反復が行われていない場合、アルゴリズムはライン８に進む。
【００６０】
ライン８では、Ｐ１（第１の制御ポイントのターゲット位置）が、Ｐ１’（第１の制御ポイントの現在の位置）から指定された許容差（１ピクセルの１／６４）内にあるかどうかを判定するチェックを行う。Ｐ１とＰ１’の距離が指定された許容差内にない場合、アルゴリズムはライン２に進む（そして反復が再度開始する）。一方、Ｐ１とＰ１’の距離が指定された許容差内にある場合、アルゴリズムはライン９に進む。
【００６１】
ライン９では、Ｑ２（第２の制御ポイントのターゲット位置）が、Ｑ２’（第２の制御ポイントの現在の位置）から指定された許容差（１ピクセルの１／６４）内にあるかどうかを判定するチェックを行う。Ｑ２とＱ２’との距離が指定された許容差内にない場合、アルゴリズムは、ライン２に進む（そして再度反復が開始する）。一方、Ｑ２とＱ２’との距離が指定された許容差内にある場合、アルゴリズムは終了する。Ｐ１とＰ１’の距離が許容差内にあり、Ｑ２とＱ２’の距離が指定された許容差内にある場合、Ｐ１とＱ２は、対応するグラフィカルオブジェクトをレンダリングするのに十分に正確であるとみなされる。
【００６２】
ある実施形態においては、制約の反復的な解決を使用し、複数の独立した制約に従った結果行われる可能性のある不適切なレンダリングを補償する。例えば、制御ポイントが、関連付けられた複数の制約を有し、その制約の一部が他の制約に依存し、その制約がさらに他の制約に依存する場合などは、対応するグラフィカルオブジェクトを適切にレンダリングすることが難しい場合がある。例えば、グラフィカルオブジェクト１３１に関しては、１つの制約セットＣ１が、エッジ１５１を最も近い完全なピクセルまで（例えば「キャピタリゼーション線」に）動かすことができる。別の制約のセットＣ２は、エッジ１５１から指定された距離にエッジ１５２を保つことができる。同様の制約のセットＣ１’およびＣ２’を、制御ポイント１０６、１０５、１０３、および１０４に関連付けることができる。さらに別の制約のセットＣ３が、エッジ１１７から指定された距離にエッジ１１６を保つことができる。Ｃ１およびＣ１’の制約に従うことは、それぞれＣ２およびＣ２’の制約に影響を与える可能性があり、Ｃ２とＣ２’の制約はさらにＣ３の制約に影響を与える可能性がある。したがって、Ｃ１、Ｃ１’、Ｃ２、およびＣ２’の制約に従うと、制御ポイント１０３および／または１０７がもはやＣ３の制約（斜めの距離１１４および１４４）に従わなくなる可能性がある。しかし、本発明の実施形態によれば、グラフィカルオブジェクトがなおＣ１、Ｃ１’、Ｃ２、およびＣ２’の制約に従うように、Ｃ３の制約を反復的に解決することができる。
【００６３】
受け取られたヒントに従って制御ポイントの位置が変更されると、スキャン変換モジュール１２６は、グラフィカルオブジェクト１３１がより小さなサイズでレンダリングできるように、ピクセルグリッドの該当ピクセル（またはサブピクセル）をオンにすることができる。スキャン変換モジュール１２６は、ピクセル表現(pixilated representation)１２７を生成し、その表現１２７が次いでディスプレイデバイス１２８に提供される。ディスプレイデバイス１２８は、カラーまたは白黒のモニタである。例えばディスプレイデバイス１２８がカラーモニタである場合など、該当する場合、スキャン変換モジュールは、一部のピクセルの一部（例えば１つのピクセルの赤、緑、または青の下位コンポーネント）のみをオンにして、グラフィカルオブジェクト１３１をより適切にレンダリングする。
【００６４】
図３および以下の記述は、本発明を実施することが可能な、適切なコンピューティング環境につ説明を提供する。これは必須ではないが、本発明は、コンピュータシステムによって実行されるプログラムモジュールなどのコンピュータ実行可能命令との一般的関連で説明できる。一般に、プログラムモジュールには、特定のタスクを行うか、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。コンピュータ実行可能命令、関連付けられたデータ構造、およびプログラムモジュールは、ここに開示される方法の動作を実行するプログラムコード手段の例を表す。
【００６５】
図３を参照すると、本発明を実施する例示的システムは、コンピュータシステム３２０の形態の汎用コンピューティングデバイスを含み、このコンピューティングデバイスは、処理ユニット３２１、システムメモリ３２２、およびシステムメモリ３２２を含む各種のシステム構成要素を処理ユニット３２１に結合するシステムバス３２３を含む。処理ユニット３２１は、本発明の機能を含む、コンピュータシステム３２０の諸機能を実施するようにデザインされたコンピュータ実行可能命令を実行することができる。システムバス３２３は、各種のバスアーキテクチャのうち任意のものを使用した、メモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数種のバス構造のいずれでもよい。システムメモリは、読み取り専用メモリ（「ＲＯＭ」）３２４とランダムアクセスメモリ（「ＲＡＭ」）３２５を含む。起動時などにコンピュータシステム３２０内の要素間の情報転送を助ける基本ルーチンを含む基本入出力システム（「ＢＩＯＳ」）３２６は、ＲＯＭ３２４に記憶されることができる。
【００６６】
コンピュータシステム３２０は、磁気ハードディスク３３９の読み書きを行うハードディスクドライブ３２７、取り外し可能磁気ディスク３２９の読み書きを行う磁気ディスクドライブ３２８、およびＣＤ−ＲＯＭや他の光学媒体などの取り外し可能光ディスク３３１の読み書きを行う光ディスクドライブ３３０も含むことができる。磁気ハードディスクドライブ３２７、磁気ディスクドライブ３２８、および光ディスクドライブ３３０はそれぞれ、ハードディスクドライブインターフェース３３２、磁気ディスクドライブインターフェース３３３、および光ドライブインターフェース３３４によってシステムバス３２３に接続される。これらのドライブとそれに関連付けられたコンピュータ可読媒体は、コンピュータシステム３２０に、コンピュータ実行可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性の記憶を提供する。ここに記載される例示的環境では磁気ハードディスク３３９、取り外し可能磁気ディスク３２９、および取り外し可能光ディスク３３１を用いるが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなどを含む他のタイプのコンピュータ可読媒体もデータ記憶に使用されることができる。
【００６７】
ハードディスク３３９、磁気ディスク３２９、光ディスク３３１、ＲＯＭ３２４、またはＲＡＭ３２５には、１つまたは複数のプログラムモジュールを備えるプログラムコード手段を記憶することができ、これには、オペレーティングシステム３３５、１つまたは複数のアプリケーションプログラム３３６、他のプログラムモジュール３３７、およびプログラムデータ３３８が含まれる。ユーザは、キーボード３４０、ポインティングデバイス３４２、あるいはマイクロフォン、ジョイスティック、ゲームパッド、スキャナなどの他の入力デバイス（図示せず）を通じてコンピュータシステム３２０にコマンドと情報を入力することができる。これらおよび他の入力デバイスは、システムバス３２３に結合された入出力インターフェース３４６を通じて処理ユニット３２１に接続することができる。入出力インターフェース３４６は、例えばシリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ユニバーサルシリアルバス（「ＵＳＢ」）インターフェース、またはＩＥＥＥ(Institute of Electrical and Electronics Engineers)１３９４インターフェース（すなわちＦｉｒｅＷｉｒｅインターフェース）などの各種のインターフェースを論理的に表し、異なるインターフェースの組合せを論理的に表すこともできる。
【００６８】
モニタ３４７または他のディスプレイデバイスは、ビデオインターフェース３４８を介してシステムバス３２３に接続される。モニタ３４７は、コンピュータシステム３２０によって生成されたテキストなどのグラフィカルオブジェクトを表示することができる。例えばスピーカ、プリンタ、スキャナなどの他の周辺装置（図示せず）もコンピュータシステム３２０に接続することができる。コンピュータシステム３４７に接続されたプリンタは、コンピュータシステム３２０によって生成されたテキストを含めて、グラフィカルオブジェクトを印刷することができる。
【００６９】
コンピュータシステム３２０は、例えばオフィス内または企業内コンピュータネットワーク、家庭ネットワーク、イントラネット、および／またはインターネットなどのネットワークに接続することができる。コンピュータシステム３２０は、例えばリモートコンピュータシステム、リモートアプリケーション、および／またはリモートのデータベースなどの外部のソースと、そのようなネットワークを通じてデータを交換することができる。
【００７０】
コンピュータシステム３２０は、ネットワークインターフェース３５３を含み、このインターフェース３５３を通じてコンピュータシステム３２０は、外部ソースからデータを受信する、かつ／または外部ソースにデータを送信する。図３に示されるように、ネットワークインターフェース３５３は、リンク３５１を介したリモートのコンピュータシステム３８３とのデータ交換を容易にする。ネットワークインターフェース３５３は、例えばネットワークインターフェースカードや、それに対応するＮＤＩＳ(Network Driver Interface Specification)スタックなどの１つまたは複数のソフトウェアモジュールおよび／またはハードウェアモジュールを論理的に表すことができる。リンク３５１は、ネットワークの一部（イーサネット（登録商標）セグメントなど）に相当し、リモートコンピュータシステム３８３は、ネットワークのノードに相当する。例えば、リンク３５１は、コンピューティングシステム１１８と１２３の間のネットワーク接続を表すことができる。
【００７１】
同様に、コンピュータシステム３２０は、入出力インターフェース３４６を含み、コンピュータシステム３２０は、このインターフェース３４６を通じて、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。入出力インターフェース３４６は、モデム３５４（例えば標準的なモデム、ケーブルモデム、またはＤＳＬ（デジタル加入者回線）モデム）に結合され、コンピュータシステム３２０は、このモデムを通じて外部ソースとの間でデータの送受信をする。図３に示されるように、入出力インターフェース３４６とモデム３５４は、リンク３５２を介したリモートコンピュータシステム３９３とのデータ交換を容易にする。リンク３５２はネットワークの一部を表し、リモートコンピュータシステム３９３は、ネットワークのノードを表す。
【００７２】
図３には本発明に適した動作環境を表しているが、本発明の原理は、必要な場合は適切な変更を加えて、本発明の原理を実施することが可能な任意のシステムで用いることができる。図３に示した環境は、説明のために過ぎず、本発明の原理を実施することが可能な各種環境の一部を表すものではない。
【００７３】
本発明によれば、ヒンティングモジュール１１９やヒントプロセッサ１３４などのモジュールと、例えばデザイン制御ポイント１２２、制御ポイント１３２、およびピクセル化された表現１２７などの関連付けられたプログラムデータは、記憶され、コンピュータシステム３２０に関連付けられたコンピュータ可読媒体のいずれからでもアクセスすることができる。例えば、そのようなモジュールの一部と、それに関連付けられたプログラムデータの一部は、システムメモリ３２２に記憶するために、オペレーティングシステム３３５、アプリケーションプログラム３３６、プログラムモジュール３３７、および／またはプログラムデータ３３８に含めることができる。
【００７４】
例えば磁気ハードディスク３３９などの大容量記憶デバイスをコンピュータシステム３２０に結合する場合、上記のモジュールとそれに関連付けられたプログラムデータは、大容量記憶デバイスに記憶されてもよい。ネットワーク環境では、コンピュータシステム３２０との関係で図示されるプログラムモジュール、またはその一部は、リモートコンピュータシステム３８３および／またはリモートコンピュータシステム３９３に関連付けられたシステムメモリおよび／または大容量記憶デバイスなどのリモートのメモリ記憶デバイスに記憶することができる。そのようなモジュールの実行は、分散環境で行うことができる。
【００７５】
本発明は、その主旨および基本的特徴から逸脱せずに、他の特定の形態で実施することができる。ここに記載した実施形態は、あらゆる点で説明のみを目的とし、制限的な内容を意図したものではない。したがって、本発明の範囲は、前述の説明ではなく特許請求の範囲によって示される。特許請求の範囲の均等物の意味と範囲に該当するすべての変更は、特許請求の範囲に包含されるものとする。
【図面の簡単な説明】
【００７６】
【図１】フォントヒンティング言語の制約を反復的に解決するための例示的なコンピュータアーキテクチャを示す図である。
【図２Ａ】フォントヒンティング言語を使用して制約の反復的なソリューションを表す例示的方法を示すフローチャートである。
【図２Ｂ】グラフィカルオブジェクトが適切にレンダリングされるように反復的に制約を解決する例示的方法を示すフローチャートである。
【図３】本発明の原理を実施するのに適した動作環境を示す図である。
【図１】
2007527029.tif 000003
【図２Ａ】
2007527029.tif 000004
【図２Ｂ】
2007527029.tif 000005
【図３】
2007527029.tif 000006
【手続補正書】
【提出日】平成19年7月27日(2007.7.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
グラフィカルオブジェクトのアウトラインを生成するための１組の制御ポイントに対するアクセス権を有するコンピューティングシステムにおいて、前記アウトラインを利用することにより前記グラフィカルオブジェクトがどのようにレンダリングされるかを判定し、前記アウトラインのある部分の位置は所定の位置に制約される可能性があり、フォントヒンティング言語を使用することにより制約の反復的なソリューションを表す方法であって、
本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約を識別するために、明確にストロークを表す１組の制御ポイントによって表される前記グラフィカルオブジェクトの特徴を識別するステップと、
本来は前記フォントヒンティング言語の語彙に基づいて表すことができない前記より複雑な制約にアクセスするステップであって、前記より複雑な制約は、前記アウトラインの少なくとも一部を制約するステップと、
前記より複雑な制約を、本来は前記フォントヒンティング言語の語彙に基づいて表すことができる複数のより単純な制約に分解するステップであって、前記より複雑な制約を、複数のより単純な制約に分解する前記ステップは、循環的に依存する制約を、少なくとも、
第１の制御ポイントの位置を制約する第１の制約であって、該第１の制約に従うことは、第２の制御ポイントの位置に依存する第１の制約と、
前記第２の制御ポイントの位置を制約する第２の制約であって、該第２の制約に従うことは、前記第１の制御ポイントの位置に依存する第２の制約と
に分解するステップを含むステップと、
前記より単純な制約の各々を対応するフォントヒンティング言語命令で表すステップであって、該フォントヒンティング言語命令を反復的に処理することにより、１つのソリューションを前記より複雑な制約に少なくとも近似させるステップと、
前記より単純な制約に従う前記グラフィカルオブジェクトを表示するために後に使用される前記より単純な制約を、１つまたは複数の物理的なコンピュータ可読な記憶媒体に記憶するステップと
を備えることを特徴とする方法。
【請求項２】
本来は前記フォントヒンティング言語の語彙に基づいて表すことができない前記より複雑な制約にアクセスする前記ステップは、
べき乗関数または指数関数に基づく制約にアクセスするステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
本来は前記フォントヒンティング言語の語彙に基づいて表すことができない前記より複雑な制約にアクセスする前記ステップは、
複数の制御ポイントを同時に移動する必要がある制約にアクセスするステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項４】
本来は前記フォントヒンティング言語の語彙に基づいて表すことができない前記より複雑な制約にアクセスする前記ステップは、
循環的に依存する制約にアクセスするステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項５】
本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約を識別するために、明確にセリフを表す１組の制御ポイントによって表される前記グラフィカルオブジェクトの特徴を識別するステップ
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記より複雑な制約を、複数のより単純な制約に分解する前記ステップは、
べき乗関数または指数関数に基づく制約をべき級数の複数の部分に分解するステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記より複雑な制約を、複数のより単純な制約に分解する前記ステップは、
複数の制御ポイントを同時に移動することが必要な制約を、それぞれが個々の制御ポイントを移動する複数の制約に分解するステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記より単純な制約の各々を対応するフォントヒンティング言語命令で表すステップであって、該フォントヒンティング言語命令を反復的に処理することにより、１つのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
前記より単純な制約の各々をＴｒｕｅＴｙｐｅ（登録商標）命令で表すステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させ、前記アウトラインの前記少なくとも一部を変更してより複雑な制約に従うことができるようにするステップと、
少なくとも特定の許容差内で、前記より複雑な制約に従う前記グラフィカルオブジェクトのアウトラインを生成するステップと、
前記アウトラインに基づいて、出力デバイスでレンダリングするための前記グラフィカルオブジェクトのピクセル表現を生成するステップと
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項１０】
フォントヒンティング言語命令を処理するように構成したコンピューティングシステムにおいて、グラフィカルオブジェクトを適切にレンダリングできるように、制約を反復的に解決するためのコンピュータによる方法であって、
複数のより単純な制約を表すフォントヒンティング言語命令を受け取るステップであって、前記複数のより単純な制約は、本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約に対応するステップと、
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させ、前記グラフィカルオブジェクトを変更して前記より複雑な制約に従うことができるようにするステップと
を備え、
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
第１の制御ポイントの現在の位置に基づいて第１のより単純な制約を適用することにより、第２の制御ポイントのターゲット位置を計算するステップと、
前記第２の制御ポイントの現在の位置に基づいて第２のより単純な制約を適用することにより、前記第１の制御ポイントのターゲット位置を計算するステップと、
前記第１の制御ポイントの前記ターゲット位置が、前記第１の制御ポイントの現在の位置から特定の許容差内にあることを判定するステップと、
前記第２の制御ポイントの前記ターゲット位置が、前記第２の制御ポイントの現在の位置から前記特定の許容差内にあることを判定するステップと、
前記第１の制御ポイントおよび前記第２の制御ポイントに従って前記グラフィカルオブジェクトを表示するステップと
を含む前記処理するステップと
を備えることを特徴とする方法。
【請求項１１】
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
べき級数の部分を表すフォントヒンティング言語命令を反復的に処理するステップ
を含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
個々の制御ポイントを移動するフォントヒンティング言語命令を反復的に処理するステップ
を含むことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記第１の制御ポイントの前記ターゲット位置を、前記第１の制御ポイントの現在の位置にするステップと、
前記第２の制御ポイントの前記ターゲット位置を、前記第２の制御ポイントの現在の位置にするステップと
をさらに備えることを特徴とする請求項１０に記載の方法。
【請求項１４】
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
指定された回数の反復が行われるまで、フォントヒンティング言語命令を反復的に処理するステップ
を含むことを特徴とする請求項１０に記載の方法。
【請求項１５】
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
制御ポイントの位置が、より複雑な制約に従う閾値許容差内になるまでフォントヒンティング言語命令を反復的に処理するステップ
を含むことを特徴とする請求項１０に記載の方法。
【請求項１６】
前記フォントヒンティング言語命令を有限回反復的に処理するステップであって、ひとつのソリューションを前記より複雑な制約に少なくとも近似させる前記ステップは、
ＴｒｕｅＴｙｐｅ（登録商標）命令を反復的に処理するステップ
を含むことを特徴とする請求項１０に記載の方法。
【請求項１７】
前記より複雑な制約に従う前記グラフィカルオブジェクトのアウトラインを生成するステップと、
前記アウトラインに基づいて、出力デバイスでレンダリングするための前記グラフィカルオブジェクトのピクセル表現を生成するステップと
をさらに備えることを特徴とする請求項１０に記載の方法。
【請求項１８】
グラフィカルオブジェクトのアウトラインを生成するための１組の制御ポイントに対するアクセス権を有するコンピューティングシステムにおいて使用するコンピュータプログラムであって、前記アウトラインを利用することにより前記グラフィカルオブジェクトがどのようにレンダリングされるかを判定し、前記アウトラインのある部分の位置は所定の位置に制約される可能性があり、前記コンピュータプログラムは、フォントヒンティング言語を使用して制約に対する反復的なソリューションを表す方法を実施し、前記コンピュータプログラムが前記コンピューティングシステムのプロセッサによって実行されるときに、
本来は前記フォントヒンティング言語の語彙に基づいて表すことができないより複雑な制約を識別するために、明確にストロークを表す１組の制御ポイントによって表される前記グラフィカルオブジェクトの特徴を識別するステップと、
本来は前記フォントヒンティング言語の語彙に基づいて表すことができない前記より複雑な制約にアクセスするステップであって、前記より複雑な制約は、前記アウトラインの少なくとも一部を制約するステップと、
前記より複雑な制約を、本来は前記フォントヒンティング言語の語彙に基づいて表すことができる複数のより単純な制約に分解するステップであって、前記より複雑な制約を、複数のより単純な制約に分解する前記ステップは、循環的に依存する制約を、少なくとも、
第１の制御ポイントの位置を制約する第１の制約であって、該第１の制約に従うことは、第２の制御ポイントの位置に依存する第１の制約と、
前記第２の制御ポイントの位置を制約する第２の制約であって、該第２の制約に従うことは、前記第１の制御ポイントの位置に依存する第２の制約と
に分解するステップを含むステップと、
前記より単純な制約の各々を対応するフォントヒンティング言語命令で表すステップであって、該フォントヒンティング言語命令を反復的に処理することにより、１つのソリューションを前記より複雑な制約に少なくとも近似させるステップと
を前記コンピューティングシステムに対して実行させるコンピュータ実行可能命令を備えたことを特徴とするコンピュータプログラム。