GdipEnumerateMetafileSrcRectDestPointsI()



Syntaxe
Resultat.i = GdipEnumerateMetafileSrcRectDestPointsI(*graphics, *metafile, @destPoints.Point, count.l, @srcRect.Rect, srcUnit.i, @callback(), *callbackData, *imageAttributes)

Paramètres

*graphics

[in] Pointeur sur un objet Graphics.

*metafile

[in] Pointeur sur un objet metafile existant

destPoints.Point

[in] Tableau de 3 structures Point (nombres entiers) qui définissent le parallélogramme ou sera dessiné le métafichier (ou certains enregistrements) avec la fonction GdipPlayMetafileRecord().

count.l

[in] Nombre d'éléments du tableau dstpoints.Point. Ce paramètre doit toujours être égal à 3.

srcRect.Rect

[in] Coordonnées d'un rectangle (nombres entiers) qui spécifie la zone du métafichier qui sera affichée (ou certains de ses enregistrements) avec la fonction GdipPlayMetafileRecord().

srcUnit.i

[in] Elément de l'énumération Unit qui indique l'unité de mesure du rectangle source.

@callback()

[in] Adresse d'une procédure Callback permettant l'énumération du métafichier. Le prototype de cette Callback est défini dans le fichier Gdiplustypes.h.

*callbackData

[in] Pointeur sur un bloc de données qui sera passé à la Callback. Si ce paramètre n'est pas utilisé, il doit être mis à 0.

*imageAttributes

[in] Pointeur sur un objet ImageAttributes qui spécifie les attributs de l'image. Ce paramètre peut être mis à 0 s'il n'est pas utilisé.

Description

Cette fonction est classé par Micosoft dans les fonctions Graphics mais je l'ai classée dans les métafiles.

Cette fonction permet d'énumérer les enregistrements du métafichier identifié par le paramètre *metafile et associé à un graphique (paramètre *graphics).

destPoints.Point défini le parallélogramme ou les éléments du métafichier seront affichés par la fonction GdipPlayMetafileRecord() dans la callback (si besoin).
Le parallélogramme est défini par 3 points : l'angle supérieur gauche, l'angle supérieur droit et l'angle inférieur gauche. Le quatrième point est extrapolé à partir des trois premiers points pour former un parallélogramme. Le métafichier dessiné est ajusté et incliné de manière à tenir à l'intérieur du parallélogramme.
Le paramètre count doit toujours être égal à trois.
L'origine du graphique est toujours à x= 0 et y = 0. Ce paramètre permet d'introduire un décalage de l'origine en x/y ainsi qu'une mise à l'échelle.
Les points sont exprimés en nombre entiers (long), c'est ce qui différencie cette fonction de la fonction GdipEnumerateMetafileSrcRectDestPoints() dont les points sont exprimés en nombres flottants, idem pour le paramètre srcRect.Rect.
srcRect.Rect défini un rectangle qui spécifie la zone du métafichier qui sera affichée (ou certains de ses enregistrements) avec la fonction GdipPlayMetafileRecord() aux coordonnées définies par le paramètre destPoint.Point pour le graphique défini par le paramètre *graphics.
*callbackData permet de passer un bloc de données à la callback, ces données pourront être utilisées dans la callback. Ce paramètre permet de passer par exemple l'identifiant du métafichier.
Les paramètres de la callback sont définis comme ceci :
recordType : WMF, EMF, EMF+
flags : (toujours 0 pour les enregistrements WMF/EMF)
dataSize : taille des données de l'enregistrement (en octets) ou 0 si pas de données.
data : Pointeur de données sur les données de l'enregistrement, ou #NULL si pas de données.
callbackData : Pointeur sur le bloc de données, s'il existe.
La callback peut ensuite appeler la fonction GdipPlayMetafileRecord() pour afficher les enregistrements (partiellement ou complètement) qui viennent juste d'être énumérés. Si cette fonction retourne #False, l'énumération se termine, sinon elle continue.
*imageAttributes peut être créé à partir d'une fonction comme GdipCreateimageAttributes() ou GdipCloneImageAttributes() pour obtenir un objet ImageAttributes. Les attributs d'image pourront ensuite être modifiés par une des commandes ImageAttributes.
L'exemple permet de choisir une zone rectangulaire variable sur l'image de gauche (métafichier) et d'afficher cette zone en partie inférieure de la fenêtre dans un parallélogramme (losange).
La fonction va incliner l'image pour qu'elle tienne à l'intérieur du parallélogramme.
Le parallélogramme pourrait être inscrit dans une ImageGadget. L'image pourrait être tronqué par l'imageGadget, c'est ce montre l'exemple de la fonction GdipEnumerateMetafileSrcRectDestPoints() qui ne diffère de celle-ci que par les coordonnées qui sont des nombres flottants.
La callback d'énumération ne sert qu'à afficher le métafichier dans cet exemple. Pour les différents types d'enregistrements possibles, reportez-vous à l'exemple de la fonction GdipEnumerateMetafileDestPointI().
Remarque :
L'exemple comporte une partie de code non exécuté sous VISTA car la fonction ne se comporte pas de la même manière sous XP et VISTA. Sous XP, les zones non définies du métafichier par rapport à la surface de dessin seront non dessinées, il subsiste un dessin rémannant à cet emplacement en fonction du déplacement de la zone de sélection. Le code force cette zone à être de la même couleur que le fond de la fenêtre. Sous VISTA, ces quelques lignes de code n'ont aucun effet. Cette zone est dessinée en noir (couleur par défaut ou zone mémoire couleur à 0 ?).

Résultat de la fonction

Si la fonction réussit, elle retourne #Ok qui est une constante de l'énumération status.
Si la fonction échoue, elle retourne une des autres valeurs de l'énumération status.

PB - OS

PureBasic v4.30 bêta 4 (Windows - x86)
Testé avec Windows Vista édition familiale Premium