Jak nativní formát Buffer GetGlyphOutline()

Překlady článku Překlady článku
ID článku: 87115 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Funkce GetGlyphOutline poskytuje metody pro aplikaci k načtení nejnižší úroveň informací o piktogramy v prostředí TrueType. Tento článek popisuje formát dat, vrátí funkce GetGlyphOutline.

Další informace

Piktogramy osnovy je řada rozvrhy, které popisují piktogramy. Každý rozvrh je definován TTPOLYGONHEADER struktury dat, který je následován tolik datových struktur TTPOLYCURVE, jako jsou vyžadovány popisují rozvrhu.

Struktura dat POINTFX, což představuje absolutní pozice, nikoli relativní pozice je popsán každou pozici. Počáteční a koncový bod piktogramy udělena tímto členem pfxStart struktura dat TTPOLYGONHEADER.

Datové struktury TTPOLYCURVE spadají do dvou typů: TT_PRIM_LINE záznamu nebo záznam TT_PRIM_QSPLINE. TT_PRIM_LINE záznamu je řada body; čar nakreslených mezi body popisují osnovy piktogramy. TT_PRIM_QSPLINE záznam je řadu bodů definování Kvadratický požadováno popisují osnovy znak křivky (q křivky).

V TrueType q-spline definována tři body (A, B a C), kde jsou body a a C na křivku a bod B je vypnuto křivky. Rovnice pro každý q křivky je způsobem (xA představuje x souřadnici bodu A, představuje yA souřadnici y z bodu A a tak dále)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA
   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA
				
kde t liší od 0,0 do 1,0.

Formát záznamu TT_PRIM_QSPLINE je následující:
  • Bod na q křivky je aktuální pozice (buď pfxStart v TTPOLYGONHEADER, počáteční bod TTPOLYCURVE nebo koncového bodu předchozí TTPOLYCURVE).
  • Bod B je aktuálního bodu v záznamu.
  • Bod C je následující:
    • Pokud záznamu má dvě nebo více bodů následující bod B, C bod je středního mezi bod B a dalšího bodu v záznamu.
    • Jinak je bod C bod následující bod B.
Následující kód představuje algoritmus použitý k záznamu TT_PRIM_QSPLINE zpracovat. Zatímco tento kód demonstruje extrahovat q křivky z TT_PRIM_QSPLINE záznamu, není vhodná pro použití v aplikaci.
   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
   }
				
Výše algoritmus pracuje body přímo, použití operátorů s plovoucí desetinnou čárkou. Body q křivky záznamy jsou však uloženy v zaokrouhlit.na.text datový typ. Následující kód demonstruje manipulovat položky zaokrouhlit.na.text data:
   FIXED fx;
   long *pl = (long *)&fx;

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

   *pl = *pl / 2;
				
následující funkce převede číslo s plovoucí desetinnou čárkou zaokrouhlit.na.text znázornění:
   FIXED FixedFromDouble(double d)
   {

   long l;

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

   }
				
v výrobní aplikace, nikoli psaní DrawQSpline funkce kreslení křivky každý q jednotlivě, je efektivnější výpočet body q křivky a ukládat v matici BOD datových struktur. Po dokončení výpočtů piktogramy předat matice BOD PolyPolygon funkce kreslení a vyplnit piktogramy.

Následující příklad představuje dat vrácených GetGlyphOutline malými písmeny "j" piktogramy v písmo Arial 24 bod 8514/a (malá písma) videa ovladače:
   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
				

Vlastnosti

ID článku: 87115 - Poslední aktualizace: 21. listopadu 2006 - Revize: 2.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Windows Software Development Kit 3.1
  • Microsoft Win32 Application Programming Interface
Klíčová slova: 
kbmt kbhowto KB87115 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:87115
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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