Select the product you need help with
Comment faire pour dessiner les contours glyphe TrueTypeNuméro d'article: 243285 - Voir les produits auxquels s'applique cet article Résumé La fonction API Win32 GetGlyphOutline peut renvoyer des données hiérarchiques glyphes native à partir d'une police TrueType. Pour dessiner un contour glyphes TrueType, les données doivent être converties de sa définition B-spline native à une séquence de définitions de ligne de courbe de Bézier. Puis la fonction de API Win32 PolyBezier peut être utilisée pour dessiner le contour. Plus d'informations La fonction GetGlyphOutline dans le Interface(API) programmation des applications Win32 peut récupérer un plan de TrueType. L'option de format GGO_NATIVE insère un tampon avec courbes quadratique B-spline d'un plan de TrueType. B-splines quadratique est utilisés par TrueType pour décrire la hiérarchie de glyphes dans un fichier de police TrueType. Pour dessiner ces courbes plan un peut implémenter une fonction dessin B-spline ou utilisez la fonction PolyBezier à partir de l'API Win32. Quadratique courbe B-spline est une classe de courbes paramétrique qui définissent le chemin d'accès de plusieurs segments de courbe via quelques points de contrôle. Une courbe quadratique est une courbe de paramétrique commande deuxième. Il n'existe aucune fonction dans l'API pour dessiner une spline quadratique directement mais si le quadratique est convertie en cubique elle peut être dessinée avec l'API Win32 fonctionne pour dessiner une courbe de Bézier ; appelé PolyBezier . En général, B-spline quadratique courbes en particulier et paramétrique courbes sont un sujet well-researched de graphiques en informatique. Ils peuvent également être très complexes. Algorithmes ont été publiés dans divers textes qui peut être utilisé pour implémenter une fonction pour dessiner une spline quadratique, mais décrivant un tel algorithme n'est pas abordée de cet article. La fonction PolyBezier pouvez dessiner une spline quadratique car une courbe de Bézier est une courbe paramétrique cubes ou troisième commande. Une spline quadratique étant une deuxième équation ordre, il peut être exprimé en termes de l'équation mètres ordre supérieure. Même si une équation permettant d'exprimer une bicarrée comme un cubique est fournie dans l'exemple de code, son dérivation est abordée pas dans cet article. Le code d'exemple dans cet article est une démonstration analyser un tampon de glyphes GGO_NATIVE renvoyé par la fonction GetGlyphOutline . La mémoire tampon retournée par l'indicateur de format GGO_NATIVE conforme à la structure TTPOLYGONHEADER . La structure TTPOLYGONHEADER et les données qui suivant immédiatement constituent un contour d'un glyphe TrueType. Un profil est un chemin complet de courbes est implicitement fermé si elle n'est explicitement renvoyée de cette façon. Consultez le SDK de plate-forme pour la documentation sur les structures TTPOLYGONHEADER et TTPOLYCURVE . Un profil de glyphes consiste en plusieurs segments de courbe représentées par TTPOLYCURVE structures. Dans un profil, le TTPOLYGONHEADER est suivi d'un ou plusieurs structures TTPOLYCURVE et les données de coordonnées du point. Le membre pfxStart fournit le point de coordonnées de départ du profil. Le décompte d'enregistrements courbe qui suivent la TTPOLYGONHEADER est fourni par le membre cb . Le point de départ est relative à l'origine du glyphe. L'origine d'un glyphe est l'angle inférieur gauche du caractère au planifié le caractère. Chaque enregistrement de courbe TTPOLYCURVE (un segment courbe) est constituée des points de contrôle quadratique B-spline ou points Polyline simples. Le nombre de points est attribué par le membre cpfx TTPOLYCURVE . Le type de courbe de spline ou de polyligne est fourni par le membre wType . Le tableau de points de coordonnées suivre immédiatement la structure. Le point de départ de la courbe est fourni par le membre apfx . Étant donné qu'un glyphe peut contenir plus d'un profil, la mémoire tampon contient d'un ou plusieurs groupes de TTPOLYGONHEADER structures et les données. Les profils suivants sont compressés qui suit immédiatement celle précédente dans le tampon natif. Le profil suivant commence par un TTPOLYGONHEADER à l'octet suivant au-delà du dernier point de l'enregistrement précédent de la courbe. Cet exemple de code dessine le contour d'un glyphe TrueType par l'analyse de la mémoire tampon GGO_NATIVE pour créer une liste de segments de courbe de Bézier qui forment chaque profil. La liste des segments de courbe de Bézier est dessinée puis à l'aide de PolyBezier . Le code qui analyse la mémoire tampon est dans la fonction DrawT2Outline . La première étape pour créer une liste de lignes de la courbe de Bézier consiste à déterminer la taille du tampon de la liste. Quatre points définissent des lignes de courbe de Bézier. La fonction PolyBezier interprète une disposition de points comme étant une ligne continue de segments de courbe de Bézier dans laquelle le début de la ligne suivante est coincident avec le point final de la ligne précédente. Par conséquent, seules trois points sont nécessaires pour décrire un segment de trait courbe de Bézier supplémentaire. Le tampon GGO_NATIVE peut contenir une courbe en forme de polyligne ou une courbe B-spline quadratique. Deux points définissent un segment de trait alors que trois points définissent une B-spline. Chaque type étant d'être dessiné avec une ligne courbe de Bézier à l'aide de PolyBezier, le scénario pire se produit lorsqu'un profil est entièrement composé de segments de ligne se développe pour plusieurs Beziers. Notez que pour exprimer une courbe plue segment dans une représentation de courbe B-spline ne nécessite qu'un seul point supplémentaire. Ce point définit explicitement la B ou désactiver courbe point et implicitement définit la sur point de courbe. Le point de courbe en est le milieu et le point "B" Suivant. Ainsi, soit un segment de trait supplémentaires ou un segment de courbe supplémentaires se développera pour trois points supplémentaires d'une ligne courbe de Bézier. Le code suppose que le tampon entier natif sera composé de structures POINTFX afin que qu'il puisse déterminer le plus grand nombre de points représenté par la mémoire tampon possible. Le nombre réel est légèrement plus petit car il est surcharge de structure à décrire les profils et des courbes. La taille du tampon de la liste de courbe de Bézier est fournie par le nombre maximal possible de points multipliée par la taille d'une structure de POINT de données et multipliée par trois. Trois sont le nombre de points supplémentaires qui sont nécessaires pour chaque segment de trait supplémentaires ou d'un segment de spline quadratique lorsque converti en une courbe de Bézier. Une fois que le tampon de courbe de Bézier a été affecté le code analyse le tampon natif en démarrant à la première TTPOLYGONHEADER . Pendant une itération de la boucle, le code traite un profil et il dessine. Une boucle interne second analyse chaque type de courbe. Dans le cas d'une courbe polyligne (TT_PRIM_LINE), chaque segment de trait de la polyligne est convertie et ajouté à la liste des Beziers avec la fonction AppendPolyLineToBezier . Si la courbe est un B-spline quadratique (TT_PRIM_QSPLINE), la fonction AppendQuadBSplineToBezier convertit et ajoute la quadratique B-spline. Chacune de ces fonctions utilise une boucle pour analyser chaque segment de la courbe dans ses points de contrôle indépendant. Puis la ligne ou la spline est converti en une courbe de Bézier et ajouté à la liste des Beziers. Une ligne courbe de Bézier pouvez dessiner une ligne droite facilement. Le début et fin vecteurs pointez tout simplement à l'extrémité opposée du segment de trait. Pour ce faire dans la fonction MakeBezierFromLine . Pour convertir une spline quadratique une spline de Bézier mètres requiert exprimer des points de contrôle le cubique en termes de points de contrôle le bicarrée. L'équation pour convertir les points de contrôle se trouve dans la fonction MakeBezierFromQBSpline . Avant du profil de dessin, le code garantit que le chemin d'accès est fermé en appelant la fonction CloseContour . La fonction est appelée uniquement si les points de début et fin de la séquence de Beziers ne sont pas coincident. La fonction PolyBezier est appelée. Après que le profil est dessiné, le profil suivant TTPOLYGONHEADER se trouve en exécutant le pointeur lpHeader au-delà de la fin des enregistrements du profil actuel. Si cela entraîne une valeur de pointeur au-delà de la fin du tampon natif, le code a traité tous les profils et se ferme. Références Pour plus d'informations sur la spécification TrueType consultez : Microsoft TrueType Specifications (http://www.microsoft.com/typography/tt/tt.htm)
(http://www.microsoft.com/typography/tt/tt.htm)
Également disponible sur du Microsoft Developer Network bibliothèque CD-ROM sous spécifications. PropriétésNuméro d'article: 243285 - Dernière mise à jour: lundi 12 février 2007 - Version: 1.5 Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
Traduction automatique IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique. La version anglaise de cet article est la suivante: 243285
(http://support.microsoft.com/kb/243285/en-us/
)
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT. |




Retour au début








