Yerel arabellek biçim GetGlyphOutline() nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 87115 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Ö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
				

Özellikler

Makale numarası: 87115 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 2.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows Software Development Kit 3.1
  • Microsoft Win32 Uygulama Programlama Arabirimi
Anahtar Kelimeler: 
kbmt kbhowto KB87115 KbMttr
Machine-translated Article
Ö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.

Geri Bildirim Ver

 

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