Come formato di buffer Native GetGlyphOutline()

Traduzione articoli Traduzione articoli
Identificativo articolo: 87115 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

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
				

ProprietÓ

Identificativo articolo: 87115 - Ultima modifica: martedý 21 novembre 2006 - Revisione: 2.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Windows Software Development Kit 3.1
  • Microsoft Win32 Application Programming Interface
Chiavi:á
kbmt kbhowto KB87115 KbMtit
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
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.

Invia suggerimenti

 

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