Al momento sei offline in attesa che la connessione Internet venga ristabilita

Come formato di buffer Native GetGlyphOutline()

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 87115
Dichiarazione di non responsabilità per articoli della Microsoft Knowledge Base su prodotti non più supportati
Questo articolo è stato scritto sui prodotti per cui Microsoft non offre più supporto. L’articolo, quindi, viene offerto ‘così come è’ e non verrà più aggiornato.
Sommario
La funzione di GetGlyphOutline fornisce un metodo per un'applicazione di recuperare le informazioni di livello più basso per un'icona nell'ambiente di TrueType. In questo articolo descrive il formato dei dati che restituisce la funzione GetGlyphOutline .
Informazioni
Una struttura di glifo è una serie di distribuzioni che descrivono l'icona. Ogni profilo viene definito da una struttura di dati TTPOLYGONHEADER , seguito da strutture di dati TTPOLYCURVE tante come sono necessari per descrivere la distribuzione.

Ogni posizione è descritta da una struttura di dati POINTFX , che rappresenta una posizione assoluta, non una posizione relativa. Inizio e fine punto per l'icona viene assegnato dal membro della struttura di dati TTPOLYGONHEADER pfxStart .

Le strutture di dati TTPOLYCURVE rientrano in due tipi: un record TT_PRIM_LINE o di un record TT_PRIM_QSPLINE. Un record TT_PRIM_LINE è una serie di punti, linee tracciate tra i punti di descrivono la struttura dell'icona. Un record TT_PRIM_QSPLINE è una serie di punti definizione quadratiche spline (q-spline) necessarie per descrivere la struttura del carattere.

In TrueType, una spline di q è definita da tre punti (A, B e C), in cui i punti di A e C sono nella curva e il punto che B è disattivata la curva. L'equazione per ogni spline di q è come illustrato di seguito (xA rappresenta la coordinata x del punto A yA rappresenta la coordinata y di un punto e così via)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
dove t varia da 0.0 a 1.0.

Il formato di un record TT_PRIM_QSPLINE è come indicato di seguito:
  • A punto la spline di q è la posizione corrente (entrambi pfxStart il TTPOLYGONHEADER, punto di partenza per la TTPOLYCURVE o il punto finale di TTPOLYCURVE il precedente).
  • Punto B è il punto corrente del record.
  • Punto C è:
    • Se il record dispone di due o più punti dopo il punto B, C di punto è il punto centrale tra punto B e il punto successivo nel record.
    • In caso contrario, punto C è il punto seguito b. punto
Il codice riportato di seguito viene presentato l'algoritmo utilizzato per elaborare un record TT_PRIM_QSPLINE. Mentre questo codice viene illustrato come estrarre q-spline da un record TT_PRIM_QSPLINE, non è appropriato per l'utilizzo in un'applicazione.
   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   }				
l'algoritmo precedente Modifica punti direttamente, utilizzando gli operatori a virgola mobile. Tuttavia, punti di spline di q record vengono memorizzati in un tipo di dati fisso. Il codice riportato di seguito viene illustrato come modificare elementi di dati fisso:
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
la funzione seguente converte un numero a virgola mobile nella rappresentazione fisso:
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
in un'applicazione di produzione, anziché scrivendo una funzione DrawQSpline per disegnare singolarmente ogni spline di q, è più efficiente calcolare punti la spline di q e memorizzarli in una matrice di strutture di dati POINT . Quando sono stati completati i calcoli per un glifo, passare la matrice POINT alla funzione PolyPolygon per tracciare e riempire il glifo.

Nell'esempio riportato di seguito vengono presentati i dati restituiti dal GetGlyphOutline per l'icona "j" minuscolo nel carattere Arial 24 punti del 8514/a (caratteri piccoli) driver video:
   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				

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 87115 - Ultima revisione: 11/21/2006 15:33:33 - Revisione: 2.3

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

  • kbmt kbhowto KB87115 KbMtit
Feedback
/html>amp;t=">