PureBasic & GDI+ 1.0
Les structures



Structures Gdi+

BitmapData
CharacterRange
ColorMapGdiplus
ColorMatrix
ColorPalette
EncoderParameter
EncoderParameters
ENHMetaHeader3
FontFamily
GdiplusStartupInput
GdiplusStartupOutput
ImageCodecInfo
MetafileHeader
PathData
PointF
PropertyItem
PWMFRect16
RectF
SizeF
WmfPlaceableFileHeader

Structures en détails


Structure BitmapData
; Structure déclarée dans le fichier GdiPlusTypes.h
; Spécifie les attributs d'un bitmap. BitmapData est utilisé par les fonctions GdipBitmapLockBits() et GdipBitmapUnlockBits().
nWidth.i
Largeur en pixels du Bitmap. Cela peut également être représenté comme le nombre de pixels dans une ligne de numérisation.
nHeight.i
Hauteur en pixels du Bitmap. Il y est également parfois fait référence en tant que nombre de lignes de numérisation.
Stride.l
Largeur de numérisation du Bitmap. Offset en octets, entre les lignes de numérisation consécutives du bitmap. Si le pas est positif, le bitmap est de haut en bas. Si le pas est négatif, le bitmap est de bas en haut.
PixelFormat.i
Format des informations en pixels du Bitmap qui a retourné cet élément BitmapData.
*Scan0
Adresse des premières données en pixels du bitmap (pointeur sur la première ligne de numérisation du bitmap (index 0)).
*Reserved.integer
Réservé. Ne pas utiliser.
EndStructure

Structure CharacterRange
; Structure déclarée dans le fichier GdiPlusTypes.h
; Spécifie une plage de positions de caractères dans une chaîne.
First.l
Spécifie la première position de la plage.
Length.l
Spécifie le nombre de positions dans la plage.
EndStructure

Structure ColorMapGdiplus  (= Structure ColorMap)
; Structure déclarée dans le fichier GdiplusColorMatrix.h
; Structure pré-déclarée dans le fichier résident PB Windows.res mais avec des noms d'éléments différents.
; Structure renommée ColorMapGdiplus pour Gdi+.
oldColor.i
Couleur originale.
newColor.i
La nouvelle couleur.
EndStructure

Structure
ColorMatrix
; Structure déclarée dans le fichier GdiplusColorMatrix.h
; Structure déclarée sous la forme d'un tableau à deux dimensions.

; La structure ColorMatrix contient une matrice 5×5 de nombres flottants simple précision.
; Plusieurs fonctions ImageAttributes ajustent les couleurs des images en utilisant une matrice de couleur.
M00.f
ligne 0 colonne 0.
M01.f
ligne 0 colonne 1.
M02.f
ligne 0 colonne 2.
M03.f
ligne 0 colonne 3.
M04.f
ligne 0 colonne 4.
M10.f
ligne 1 colonne 0.
M11.f
ligne 1 colonne 2.
M12.f
ligne 1 colonne 2.
M13.f
ligne 1 colonne 3.
M14.f
ligne 1 colonne 4.
M20.f
ligne 2 colonne 0.
M21.f
ligne 2 colonne 1.
M22.f
ligne 2 colonne 1.
M23.f
ligne 2 colonne 3.
M24.f
ligne 2 colonne 4.
M30.f
ligne 3 colonne 0.
M31.f
ligne 3 colonne 1.
M32.f
ligne 3 colonne 2.
M33.f
ligne 3 colonne 3.
M34.f
ligne 3 colonne 4.
M40.f
ligne 4 colonne 0.
M41.f
ligne 4 colonne 1.
M42.f
ligne 4 colonne 2.
M43.f
ligne 4 colonne 3.
M44.f
ligne 4 colonne 4.
EndStructure

Structure ColorPalette
; Structure déclarée dans le fichier GdiplusPixelFormats.h
; La structure ColorPalette définit un choix de couleurs qui composent une palette de couleus. Les couleurs sont des couleurs 32 bits au format ARGB.
Flags.i
Combinaison des valeurs de l'énumération de PaletteFlags.
Count.i
Nombre d'élément du tableau pointé par *Entries.long.
*Entries.integer
Tableau de couleurs ARGB.
EndStructure

Structure EncoderParameter
; Structure déclarée dans le fichier GdiPlusImaging.h
; Les éléments EncoderParameter permettent de passer un tableau de valeurs à un encodeur d'image et permet aussi de recevoir une liste de valeurs possibles prises en charge par un paramètre particulier d'un encodeur d'image particulier.
guid.GUID
Identifie la catégorie du paramètre.
Les différents GUID (Image encoder GUID) qui représentent les catégories de paramètres (EncoderCompression, EncoderColorDepth, etc.) sont définis dans le fichier Gdiplusimaging.h.
numberOfValues.i
Nombre de valeurs du tableau pointé par le membre *value de cette structure.
type.i
Identifie le type de données du paramètre. L'énumération EncoderParameterValueType définit plusieurs types possibles de valeur.
*value
Pointeur sur un tableau de valeurs. Chaque valeur a le type indiqué par l'élément 'type.l' de la structure.
EndStructure

Structure
EncoderParameters
; Structure déclarée dans le fichier GdiPlusImaging.h
; La structure permet de stocker des éléments de type EncoderParameter (paramètres du codec).
Count.i
Nombre de structures EncoderParameter dans le tableau (élément Parameter.EncoderParameter).
Parameter.EncoderParameter[1]
Tableau d'un élément EncoderParameter (voir ci-dessus).
EndStructure

Si le nombre de structures EncoderParameter est supérieur à 1, vous devez allouer assez de mémoire pour contenir toutes les structures EncoderParameter qui seront dans le tableau. Par exemple, si vous avez cinq structures EncoderParameter, vous devriez utiliser un code semblable à celui-ci mais les éléments des structure de la boucle for i devront avoir les valeurs nécessaire à votre code -ce qui est entre With
*Parameter et EndWith :

; nombre de structures contenues dans le tableau de la structure EncoderParameters
Nb_EncoderParameter = 5

; allocation mémoire necessaire pour les 5 éléments, on passe par un tableau*memory = AllocateMemory(SizeOf(EncoderParameters) + ((Nb_EncoderParameter-1) * SizeOf(EncoderParameter)))

; on teste que la mémoire est bien allouée
If *memory
   ; déclaration d'un pointeur et *Params.EncoderParameters pointe la mémoire allouée *Params.EncoderParameters  = *memory

   ; on définit le nombre d'éléments du tableau d'encodeur*Params\Count = Nb_EncoderParameter

   ; pour permettre l'accès aux 5 éléments, on calcule l'adresse*AdresseBase = *memory + OffsetOf(EncoderParameters\Parameter)  ; + OffsetOf(Count) car le tableau commence après l'élément Count 
   
   ; mettre les valeurs des 5 éléments avec une boucle, c'est un exemple
    For i = 0 To *Params\Count-1
    Debug i*Parameter.EncoderParameter = *AdresseBase + (i * SizeOf(EncoderParameter))
       With *Parameter
          CopyMemory(?EncoderSaveFlag, \guid, SizeOf(guid))
          \NumberOfValues = 1
          \Type = #EncoderparameterValueTypeLong   ; valeur à personnaliser
          \Value = @Valeurparametre
       EndWith
    Next i

;    ...  ; code
   
EndIf 

; ...  ; code


; libère la mémoire
If *memory
   FreeMemory(*memory)
   *memory = 0
EndIf

End 

DataSection
   ;/ EncoderSaveFlag
   EncoderSaveFlag :
      Data.l $292266FC
      Data.w $AC40, $47BF
      Data.b $8C, $FC, $A8, $5B, $89, $A6, $55, $DE
EndDataSection



Structure
EnhmetaHeader3

; Structure déclarée dans le fichier GdiPlusMetaHeader.h
; La structure EnhmetaHeader3 contient des données des métafichiers améliorés (Enhanced Metafile =EMF) incluant les dimensions de l'image du métafichier, le nombre d'enregistrements du métafichier et la résolution du périphérique sur lequel le métafichier a été créé (voir plus d'informations ici).
iType.i
Type des enregistrements. Ce membre doit toujours valoir #EMR_HEADER
nSize.i
Taille de la structure, en octets. Cette valeur doit être supérieure à la valeur retournée par SizeOf(ENHMetaHeader3).
rclBounds.RECTL
Dimensions en unités du périphérique, du plus petit rectangle qui peut être dessiné autour de l'image stockée dans le métafichier.
rclFrame.RECTL
Dimensions en unités valant 0,01 millimètres, du rectangle qui entoure l'image stockée dans le métafichier.
dSignature.i
Signature par mot double (DWORD). Ce membre doit valoir #ENHMETA_SIGNATURE.
nVersion.i
Version du format du métafichier. La valeur de la version courante est $10000.
nBytes.i
Taille en octets du métafichier EMF.
nRecords.i
Nombre d'enregistrements du métafichier EMF
nHandles.w
Nombre de handles dans la table de handles des métafichiers EMF (l'index zéro dans la table est réservé.)
sReserved.w
Paramètre réservé (doit être à zéro)
nDescription.i
Nombre de caractères du tableau qui contient la chaîne descriptive du métafichier EMF. Ce membre doit être mis à zéro si le métafichier EMF ne contient pas de chaîne descriptive
offDescription.i
Offset à partir du début de la structure EnhMetaHeader3 jusqu'à la chaîne descriptive du contenu du métafichier EMF. Ce membre doit être mis à zéro si le métafichier EMF ne contient pas de chaîne descriptive.
nPalEntries.i
Nombre d'entrées de la palette du métafichier EMF
szlDevice.SIZEL
Résolution du périphérique de référence, en pixels
szlMillimeters.SIZEL
Résolution du périphérique de référence, en millimètres
EndStructure

Structure FontFamily
; Structure non déclarée sous cette forme mais utilisée sous cette forme avec les exemples PB (c'est une class Gdi+)
*FontFamily
EndStructure

Structure GdiplusStartupInput
; Structure déclarée dans le fichier GdiPlusInit.h
; La structure GdiplusStartupInput contient un bloc d'arguments qui sont nécessaires à la fonction GdiplusStartup().

GdiPlusVersion.i
Indique la version de Microsoft Windows GDI+. Doit être mis à 1.
*DebugEventCallback.DebugEventProc
Pointeur sur une fonction callback que GDI+ peut appeler, en mode débogage, pour donner des alertes et avertissements. Ce paramètre peut être mis à #NULL s'il n'est pas utilisé.
SuppressBackgroundThread.i
Valeur booléenne qui spécifie s'il faut supprimer ou non le thread en tache de fond de GDI+. Si vous mettez ce membre à #True, la fonction GdiplusStartup() retourne (dans son paramètre de sortie output.GdiplusStartupOutput) un pointeur sur une fonction hook et un pointeur sur une fonction unhook . Vous devez appeler ces fonctions correctement pour remplacer le thread de fond. Si vous ne voulez appelez directement ces fonctions hook et unhook, mettez ce paramètre à #False.
SuppressExternalCodecs.i
Valeur booléenne qui spécifie si GDI+ supprime les codec d'image externes. La version 1.0 de GDI+ ne supporte pas les codec externes d'image, ce paramètre est ignoré.
EndStructure

Structure GdiplusStartupOutput
; Structure déclarée dans le fichier GdiPlusInit.h
; La fonction GdiplusStartup() utilise la structure GdiplusStartupOutput pour retourner (via le paramètre de sortie output.GdiplusStartupOutput) un pointeur sur une fonction hook et un pointeur sur une fonction unhook. Si vous positionnez le membre SuppressBackgroundThread du paramètre d'entrée à #True de la fonction GdiplusStartup(), vous êtes responsables de l'appel de ces fonctions pour remplacer le thread de fond de Microsoft Windows GDI+.
*NotificationHook.NotificationHookProc
Ce paramètre reçoit un pointeur sur une fonction hook.
*NotificationUnhook.NotificationUnhookProc
Ce paramètre reçoit un pointeur sur une fonction unhook.
EndStructure

Structure ImageCodecInfo
; Structure déclarée dans le fichier GdiPlusImaging.h
; Une variable ImageCodecInfo stocke des informations sur un codec d'image (encodeur/décodeur). GDI+ fournit plusieurs codecs d'image intégrés. Vous pouvez obtenir des informations sur ces codecs en utilisant la fonction GetImageEncoders() ou la fonction GetImageDecoders(). Chacune de ces fonctions renvoie un tableau d'éléments ImageCodecInfo, un pour chaque encodeur ou décodeur disponible.
clsid.CLSID

Identificateur du codec (encodeur/decodeur).
formatID.GUID
Identificateur du format de fichier. Les GUID qui identifient les différents formats de fichier (ImageFormatBMP, ImageFormatEMF etc.) sont définis dans le fichier GdiPlusMetaHeader.h.
codecName.s
Chaîne au format unicode qui contient le nom du codec.
dllName.s
Chaîne au format unicode qui contient le nom du chemin de la DLL dans laquelle réside le codec. Si le codec n'est pas dans une DLL, ce paramètre vaut #Null.
formatDescription.s
Chaîne au format unicode qui contient le nom du format de fichier utilisé par le codec.
filenameExtension.s
Chaîne au format unicode qui contient tous les noms d'extension de fichier associés au codec. Les extensions sont séparés par des points-virgule.
mimeType.s
Chaîne au format unicode qui contient le nom du type MIME (Multipurpose Internet Mail Extensions) du codec.
flags.i
Valeur de 32 bits (long) utilisée pour stocker des informations supplémentaires sur le codec. Ce flag contient une combinaison des éléments de l'énumération ImageCodecFlags.
version.i
Numéro de version du codec.
sigCount.i
Nombre entier qui indique le nombre de signatures utilisé par le format de fichier associé au codec.
sigSize.i
Nombre entier qui indique le nombre d'octets de chaque signature.
*sigPattern.byte
Pointeur sur un tableau d'octets à deux dimensions qui représente la signature du codec.
*sigMask.byte
Pointeur sur un tableau d'octets à deux dimensions qui contient un masque pour chaque signature qui peut être utilisé comme filtre.
EndStructure

Structure
MatrixOut
; Utilisé principalement avec la fonction des matrices GdipGetMatrixElements().
m11.f
Valeur de l'élément à l'intersection de la première ligne et de la première colonne.
Ce paramètre représente le facteur de mise à l'échelle selon l'axe X (scale).
m12.f
Valeur de l'élément à l'intersection de la première ligne et de la deuxième colonne.
Ce paramètre représente le facteur de rotation, coordonnée X (rotate).
m21.f
Valeur de l'élément à l'intersection de la deuxième ligne et de la première colonne.
Ce paramètre représente le facteur de rotation, coordonnée Y (rotate).
m22.f
Valeur de l'élément à l'intersection de la deuxième ligne et de la deuxième colonne.
Ce paramètre représente le facteur de mise à l'échelle selon l'axe Y (scale).
dx.f
Valeur de l'élément à l'intersection de la troisième ligne et de la première colonne.
Ce paramètre représente la translation selon l'axe X (translate).
dy.f
Valeur de l'élément à l'intersection de la troisième ligne et de la deuxième colonne.
Ce paramètre représente la translation selon l'axe Y (translate).
EndStructure

Structure MetafileHeader
; Structure déclarée dans le fichier GdiPlusMetaHeader.h
; La structure MetafileHeader stocke des propriétés d'un métafichier (voir plus d'informations ici).
     Type.i
Elément de l'énumération MetafileType qui indique le type du métafichier.
Size.i
Taille en octets du métafichier.
Version.i
Version du métafichier. La version de métafichier indique si le métafichier est un métafichier EMF, EMF+ ou WMF. Les fichiers EMF ont toujours le numéro de version égal à $10000.
Les fichiers EMF+ ont le numéro de version égal à $DBC01001.
Les fichiers WMF ont généralement le numéro de version égal à $300 mais des versions de fichiers plus anciennes peuvent valoir $100.
EmfPlusFlags.i
Drapeau indiquant le type EMF+ du métafichier. C'est un élément de l'énumération EmfType.
DpiX.f
Résolution horizontale, en points par pouce (dots per inch), de l'image stockée par le métafichier
DpiY.f
Résolution verticale, en points par pouce (dots per inch), de l'image stockée par le métafichier.
X.l
Coordonnée la plus à droite de l'image stockée par le métafichier.
Y.l
Coordonnée la plus haute de l'image stockée par le métafichier.
Width.l
Largeur en pixels, de l'image stockée par le métafichier.
Height.l
Hauteur en pixels, de l'image stockée par le métafichier.
StructureUnion
WmfHeader.METAHEADER
Obtient le header WMF (Windows Metafile) du métafichier.
EmfHeader.ENHMETAHEADER3
Obtient le header EMF (Enhanced Metafile) du métafichier.
EndStructureUnion
EmfPlusHeaderSize.l
Taille en octets du header EMF+ du métafichier.
LogicalDpiX.l
Résolution horizontale logique, en points par pouce (dots per inch), de l'image stockée par le métafichier.
LogicalDpiY.l
Résolution verticale logique, en points par pouce (dots per inch), de l'image stockée par le métafichier.
EndStructure


Structure PathData
; Structure (class) déclarée dans le fichier GdiPlusTypes.h
; Contient les données graphiques composant un GraphicsPath.

Count.l
Nombre de point du GraphicsPath.
*Points.PointF
Ponteur sur le tableau de points du GraphicsPath.
*Types.Byte
Ponteur sur le tableau de points du GraphicsPath.
EndStructure

Structure PointF
; Structure déclarée dans le fichier GdiPlusTypes.h
; Représente les coordonnées x et y en virgule flottante qui définissent un point dans un plan à deux dimensions.
x.f
Coordonnée X du point
y.f
Coordonnée Y du point
EndStructure

Structure
PropertyItem
; Structure déclarée dans le fichier GdiPlusImaging.h
; Cette structure contient un seul élément des méta-données d'une image.
id.i
Nombre entier qui identifie le type de metadata stocké. Les constantes qui identifient les différents types de metadata (#PropertyTagEquipMake, #PropertyTagEquipModel, etc.) sont des éléments de l'énumération Image property ID tags. Id est de type PROPID (32 bit non signé) et est défini dans le fichier WTypes.h.
length.i
Taille en octets du tableau de valeurs pointé par *value.
wtype.w
Nombre entier qui identifie le type de données du tableau de valeurs pointé par *value. Les constantes qui identifient les divers types de propriétés d'images (#PropertyTagTypeByte, #PropertyTagTypeASCII, etc.) sont des éléments de l'énumération Image property types.
*value
Pointeur sur un tableau de valeurs. Chaque valeur du tableau a le type de données (data type) spécifié par l'élément wtype.w.
padding.w
; Utilisé pour l'alignement des données sur 32 bit
EndStructure

Structure PWMFRect16
; Structure déclarée dans le fichier GdiPlusMetaHeader.h
; La structure PWMFRect16 définit un rectangle qui délimite un métafichier placeable. Le rectangle définit la taille et la position du métafichier.
Left.w
Coordonnée de gauche du rectangle qui délimite le métafichier.
Top.w
Coordonnée supérieure du rectangle qui délimite le métafichier.
Right.w
Coordonnée de droite du rectangle qui délimite le métafichier.
Bottom.w
Coordonnée inférieure du rectangle qui délimite le métafichier.
EndStructure

Structure RectF
; Structure déclarée dans le fichier GdiPlusTypes.h
; Stocke les coordonnées d'un rectangle (nombres flottants).
x.f
Coordonnée x de l'angle supérieur gauche du rectangle.
y.f
Coordonnée y de l'angle supérieur gauche du rectangle.
width.f
Largeur du rectangle.
height.f
Hauteur du rectangle.
EndStructure

Structure SizeF
; Structure déclarée dans le fichier GdiPlusTypes.h
; Stocke la largeur et la hauteur, généralement d'un rectangle (nombres flottants).
width.f
Largeur du rectangle.
height.f
Hauteur du rectangle.
EndStructure

Structure WmfPlaceableFileHeader
; Structure déclarée dans le fichier GdiPlusMetaHeader.h
; Cette structure permet de retrouver ou de placer les éléments du pré-header des métafichiers WMF Placeable (taille de 22 octets, voir plus d'informations ici).
Key.i
Valeur d'identification qui indique la présence d'un header d'un métafichier placeable. Cette valeur est toujours $9AC6CDD7.
Hmf.w
Handle du métafichier en mémoire. Lorsque il est écrit sur disque, ce membre n'est pas utilisé et contiendra toujours la valeur 0.
BoundingBox.PWMFRect16
Rectangle de destination, mesuré en twips, pour l'affichage du métafichier. La structure PWMFRect16 est décrite plus haut sur cete page.

Tableau de conversion : L'abréviation TP désigne le nombre de Twips par Pixel qui est la mesure couramment employée pour indiquer la résolution video utilisée ainsi que celle d'une imprimante: il s'agit donc d'une unité dépendante du périphérique.


Inch.w

Nombre de twips par pouce utilisés pour représenter l'image. Normalement, il y a 1440 twips par pouce; cependant, ce nombre peut être changé pour redimensionner une image.
  - Une valeur de 720 spécifie que l'image a deux fois sa taille normale.
  - Une valeur de 360 spécifie que l'image a quatre fois sa taille normale.
  - Une valeur de 2880 spécifie que l'image a une taille de moitié par rapport à sa taille normale.
Reserved.i
Paramètre réservé (doit être à zéro).
Checksum.w
Checksum pour les 10 mots précédents du header. Cette valeur peut être utilisée pour déterminer si le métafichier a été corrompu.
EndStructure