GetGlyphOutline() ネイティブ バッファー フォーマットする方法

文書翻訳 文書翻訳
文書番号: 87115
すべて展開する | すべて折りたたむ

概要

は、 GetGlyphOutline メソッドをアプリケーションに機能を提供します。最下位レベルでは、TrueType のグリフ情報を取得します。環境です。この資料では、データの形式を説明、GetGlyphOutline 関数を返します。

詳細

グリフのアウトラインを一連のグリフを記述するコンターです。各によって輪郭を定義します。 TTPOLYGONHEADER データ構造体は、多くとして続く TTPOLYCURVE データ構造体のようにする必要があります。輪郭をについて説明します。

各位置で記載されている、 POINTFX データ構造は、いない、相対的な位置、絶対位置を表します。開始終了点のグリフが与えですが pfxStart メンバー、 TTPOLYGONHEADER データ構造体です。

は、 TTPOLYCURVE データ構造体は 2 種類に分類されます。 TT_PRIM_LINEレコードまたはレコードの TT_PRIM_QSPLINE。TT_PRIM_LINE のレコードは、一連のです。ポイントです。点の間に描画される線の輪郭を説明する、グリフです。TT_PRIM_QSPLINE レコード一連のポイントを定義するには、2 次スプライン (q スプライン) のアウトラインを作成するために必要な文字があります。

TrueType では、q スプラインが 3 つ定義されてポイント (A、B、および C)A と C のポイント、カーブと点 B がオフ曲線です。各 q スプラインの数式のとおりです (xA を表します、x 座標のポイント A、無謀の点の y 座標を表す、いうように)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA
   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA
				
場所 t は 0.0 から 1.0 に異なります。

TT_PRIM_QSPLINE レコードの形式は次のとおりです。
  • ポイント q スプラインの現在位置 (どちらか pfxStart ではTTPOLYGONHEADER、TTPOLYCURVE の開始点を終了点は、以前の TTPOLYCURVE の)。
  • レコードの現在の位置は点 B です。
  • ポイント C は次のとおりです。
    • C は 2 つのレコードを持っています、B 点の後、多くのポイントをポイントします。ポイント B と次のポイントの中間ですがレコードです。
    • それ以外の場合、ポイント C を B 点の後にポイントです。
アルゴリズムを次のコードを表示するプロセスには、TT_PRIM_QSPLINE のレコードです。このコードを抽出する方法を示していますがq スプライン TT_PRIM_QSPLINE 記録から、用途に適してではありません。アプリケーションでは。
   pfxA = pfxStart;                // Starting point for this polygon

   for (u = 0; u < cpfx - 1; u++)  // Walk through points in spline

   {
   pfxB = apfx[u];              // B is always the current point
   if (u < cpfx - 2)            // If not on last spline, compute C

      {
      pfxC.x = (pfxB.x + apfx[u+1].x) / 2;  // x midpoint
      pfxC.y = (pfxB.y + apfx[u+1].y) / 2;  // y midpoint
      }

   else                         // Else, next point is C

      pfxC = apfx[u+1];


                                // Draw q-spline
   DrawQSpline(hdc, pfxA, pfxB, pfxC);
   pfxA = pfxC;                 // Update current point
   }
				
上記のアルゴリズム点直接浮動小数点を使用した操作します。演算子。ただし、点 q スプライン レコードは固定に格納されます。データを入力します。次のコードは、固定を操作する方法を示しています。データ項目。
   FIXED fx;
   long *pl = (long *)&fx;

   // Perform all arithmetic on *pl rather than on fx

   *pl = *pl / 2;
				
次の関数は、浮動小数点数に固定の変換します。表示:
   FIXED FixedFromDouble(double d)
   {

   long l;

   l = (long) (d * 65536L);
   return *(FIXED *)&amp;l;

   }
				
書き込みではなく、実稼働のアプリケーションでは、 DrawQSpline 個別に各 q スプラインを描画する機能、効率的にq スプライン上のポイントを計算し、それらの配列に格納 ポイントデータ構造です。グリフの計算が完了すると、通過します。点の配列には、 PolyPolygon 関数を描画して塗りつぶすにはグリフです。

次の使用例で返されるデータが表示されます、24 ポイントの ms p ゴシック フォントの小文字の"j"用 GetGlyphOutline8514/a (小さなフォント) のビデオ ドライバーの。
   GetGlyphOutline GGO_NATIVE 'j'
   dwrc            = 208      // Total native buffer size in bytes
   gmBlackBoxX, Y  = 6, 29    // Dimensions of black part of glyph
   gmptGlyphOrigin = -1, 23   // Lower-left corner of glyph
   gmCellIncX, Y   = 7, 0     // Vector to next glyph origin

   TTPOLYGONHEADER #1           // Contour for dot on "j"
   cb       = 44              // Total size of dot polygon
   dwType   = 24              // TT_POLYGON_TYPE
   pfxStart = 2.000, 20.000   // Start at lower-left corner of dot

   TTPOLYCURVE #1

   wType  = TT_PRIM_LINE
   cpfx   = 3
   pfx[0] = 2.000, 23.000
   pfx[1] = 5.000, 23.000
   pfx[2] = 5.000, 20.000   // Automatically close to pfxStart

   TTPOLYGONHEADER #2   // Contour for body of "j"
   cb       = 164     // Total size is 164 bytes
   dwType   = 24      // TT_POLYGON_TYPE
   pfxStart = -1.469, -5.641

   TTPOLYCURVE #1     // Finish flat bottom end of "j"

   wType  = TT_PRIM_LINE
   cpfx   = 1
   pfx[0] = -0.828, -2.813

   TTPOLYCURVE #2    // Make hook in "j" with spline

                    // Point A in spline is end of TTPOLYCURVE #1
    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // two points in spline -> one curve
    pfx[0] = -0.047, -3.000  // This is point B in spline
    pfx[1] = 0.406, -3.000   // Last point is always point C

   TTPOLYCURVE #3    // Finish hook in "j"

                    // Point A in spline is end of TTPOLYCURVE #2
   wType  = TT_PRIM_QSPLINE
   cpfx   = 3               // Three points -> two splines
   pfx[0] = 1.219, -3.000   // Point B for first spline
                             // Point C is (pfx[0] + pfx[1]) / 2
   pfx[1] = 2.000, -1.906   // Point B for second spline
   pfx[2] = 2.000, 0.281    // Point C for second spline

   TTPOLYCURVE #4    // Majority of "j" outlined by this polyline

    wType  = TT_PRIM_LINE
    cpfx   = 3
    pfx[0] = 2.000, 17.000
    pfx[1] = 5.000, 17.000
    pfx[2] = 5.000, -0.250

   TTPOLYCURVE #5    // start of bottom of hook

    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // One spline in this polycurve
    pfx[0] = 5.000, -3.266   // Point B for spline
    pfx[1] = 4.188, -4.453   // Point C for spline

   TTPOLYCURVE #6    // Middle of bottom of hook

    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // One spline in this polycurve
    pfx[0] = 3.156, -6.000   // B for spline
    pfx[1] = 0.766, -6.000   // C for spline

   TTPOLYCURVE #7    // Finish bottom of hook and glyph

    wType  = TT_PRIM_QSPLINE
    cpfx   = 2               // One spline in this polycurve
    pfx[0] = -0.391, -6.000  // B for spline
    pfx[1] = -1.469, -5.641  // C for spline
				

プロパティ

文書番号: 87115 - 最終更新日: 2011年7月21日 - リビジョン: 4.0
キーワード:?
kbhowto kbmt KB87115 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:87115
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com