Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Yerel arabellek biçim GetGlyphOutline() nasıl

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:87115
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.
Özet
GetGlyphOutline işlevi <a0>TrueType</a0> ortamında glif en alt düzeyde bilgi almak bir uygulama için bir yöntem sağlar. Bu makalede, GetGlyphOutline işlevini verir verilerin biçimini tanımlar.
Daha fazla bilgi
Bir glif anahat glifi açıklayan dağılımlarını dizisidir. Her bir dağılımı dağılıma tanımlamak için gerektiğinden çok TTPOLYCURVE veri yapıları tarafından izlenen bir TTPOLYGONHEADER veri yapýsý olarak tanımlanır.

Her konuma, bir göreceli konumu mutlak bir konumu gösteren bir POINTFX veri yapýsý tanımlanır. Başlangıç ve glifi noktasının bitiş TTPOLYGONHEADER veri yapısı pfxStart üyesi tarafından verilir.

TTPOLYCURVE veri yapılarını iki türe ayrılır: bir TT_PRIM_LINE kaydı veya TT_PRIM_QSPLINE kayıt. Bir dizi noktaları TT_PRIM_LINE kayıttır; glifi anahatlarını noktalar arasında çizilmiş satırlarını açıklamak. Bir dizi karakterin anahat tanımlamak için gereken çeyrek dönemlerde splines (q splines) tanımlama noktaları TT_PRIM_QSPLINE kayıttır.

TrueType'de, q-ayraç üç (A, B ve C) noktaları burada A ve C Eğride noktalarıdır ve B eğri açık tanımlanır. Her q ayraç denklemi (xA noktası A yA temsil x koordinatını y-koordinatı noktası A, vb. gösterir) aşağıdaki gibi
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
burada t 0,0 ile 1,0 değişir.

TT_PRIM_QSPLINE kaydının biçimi aşağıdaki gibidir:
  • Nokta, q-ayraç geçerli konumunu (ya da pfxStart the TTPOLYGONHEADER, the TTPOLYCURVE başlangıç noktası veya önceki TTPOLYCURVE bitiş noktası) açık.
  • Nokta B kayıttaki geçerli noktasıdır.
  • Nokta C aşağıdaki gibidir:
    • Iki kaydı varsa veya daha fazla puan noktası B aşağıdaki noktası C kayıttaki bir sonraki noktasını noktasını B arasındaki orta ' dir.
    • Aksi halde, noktası C noktası b aşağıdaki noktasıdır
Aşağıdaki kod TT_PRIM_QSPLINE bir kaydı işlemek için kullanılan algoritma sunar. Bu kod, q-splines TT_PRIM_QSPLINE kaydının ayıklamak gösterilmiştir, ancak bir uygulamada kullanmak için uygun değil.
   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   }				
Kayan nokta) işleçleri kullanarak doğrudan, yukarıdaki algoritma noktalarını yönetir. Ancak, q-ayraç kayıtlarında noktaları SAYıDÜZENLE veri türü depolanır. Aşağıdaki kodda, SAYıDÜZENLE veri öğeleri işlemek gösterilmiştir:
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
aşağıdaki işlevi, bir kayan noktalı sayı SABIT gösterimine dönüştürür:
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
bir üretim uygulaması yerine DrawQSpline işlev yazma her q ayraç tek tek çizmek için q-ayraç noktalarında hesaplamak ve bunları NOKTASı veri yapıları dizisi depolamak için daha verimli olur. Hesaplamalar için glif tamamlandığından, çizmek ve glifi doldurmak için PolyPolygon işlevine NOKTASı dizi geçirmek.

Aşağıdaki örnek, "j" küçük glif 8514/a (küçük yazı tipleri) video sürücüsünün 24-nokta Arial yazı tipi için GetGlyphOutline tarafından döndürülen verilerin sunar:
   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				

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 87115 - Son İnceleme: 11/21/2006 15:33:33 - Düzeltme: 2.3

Microsoft Windows Software Development Kit 3.1, Microsoft Win32 Uygulama Programlama Arabirimi

  • kbmt kbhowto KB87115 KbMttr
Geri bildirim