Jak nativní formát Buffer GetGlyphOutline()

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.
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				

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 87115 - Poslední kontrola: 11/21/2006 15:33:33 - Revize: 2.3

Microsoft Windows Software Development Kit 3.1, Microsoft Win32 Application Programming Interface

  • kbmt kbhowto KB87115 KbMtcs
Váš názor