ACCESS + EXCEL : Classe de gestions des images avec Gdi+

Date de publication : 15/05/08 , Date de mise à jour : 16/09/09

Par Thierry GASPERMENT (arkham46.developpez.com/)
 

Module de classe VBA pour faciliter l'utilisation de la librairie graphique gdiplus.dll (GDI+)
Version actuelle : v1.6

               Version PDF (Miroir)   Version hors-ligne (Miroir)

I. Introduction
II. Remarques préalables
II-A. Remarques
II-B. Pré-requis
II-C. Compatibilité avec Excel
III. Les fonctions de création et de sauvegarde
III-A. OpenFile
III-B. CloseFile
III-C. CreateBitmap
III-D. CreateBitmapForImage
III-E. SaveFile
III-F. SaveTransformFile
III-G. SaveJpegLossLess
IV. Autres fonctions de lecture / écriture de l'image
IV-A. GetPixels
IV-B. SetPixels
IV-C. SetBitmap
IV-D. GetBitmap
IV-E. SetImageArray
IV-F. GetImageArray
IV-G. LoadBitmapFromControl
IV-H. GetIPictureDisp
V. Les fonctions de modification de l'image
V-A. ReplaceColor
V-B. FillColor
V-C. ApplyColorMatrix
V-D. Resize
V-E. Crop
V-F. Rotate
V-G. RotateFlip
VI. Les fonctions de dessin
VI-A. DrawPixel
VI-B. DrawLine
VI-C. DrawRectangle
VI-D. DrawEllipse
VI-E. DrawPolygon
VI-F. DrawText
VI-G. DrawImage
VI-H. DrawBitmap
VII. Les fonctions pour gérer la liste d'images
VII-A. ImageListAdd
VII-B. ImageListGetBitmap
VII-C. ImageListAddBitmap
VII-D. ImageListAddRect
VII-E. ImageListAddFromControl
VII-F. ImageListAddFromArray
VII-G. ImageListAddPictureMask
VII-H. ImageListNew
VII-I. ImageListExists
VII-J. ImageListDel
VII-K. ImageListDelAll
VII-L. ImageListClone
VII-M. ImageListWidth
VII-N. ImageListHeight
VII-O. ImageListGetIPictureDisp
VII-P. Fonctions de dessin / transformation / gif animés
VIII. Les fonctions de transformations
VIII-A. WorldRotate
VIII-B. WorldTranslate
VIII-C. WorldScale
VIII-D. WorldReset
VIII-E. WorldPush
VIII-F. WorldPop
IX. Les fonctions de restitution de l'image à l'écran
IX-A. RepaintControl
IX-B. RepaintControlNoFormRepaint
IX-C. FastRepaint
IX-D. FastRepaintSetCorrection
IX-E. FastRepaintSetClipControl
IX-F. FastRepaintResetClip
X. Les fonctions pour gérer les régions
X-A. CreateRegionEllipse
X-B. CreateRegionPolygon
X-C. CreateRegionRect
X-D. DeleteRegion
X-E. DeleteAllRegions
X-F. FrameRegion
X-G. FillRegion
X-H. HatchRegion
X-I. GetRegionXY
X-J. PointInRegion
X-K. GetRegionRect
X-L. RegionExists
X-M. RegionAddRegion
X-N. RegionCombine
X-O. CreateRegionFromColor
X-P. ScaleRegion
X-Q. TranslateRegion
X-R. RotateRegion
X-S. RegionsIntersect
X-T. RegionClone
X-U. SetFormRegion
X-V. ResetFormRegion
XI. Sauvegarde d'images en mémoire
XI-A. KeepImage
XI-B. ResetImage
XI-C. ImageExists
XI-D. DeleteImage
XI-E. DeleteAllImages
XI-F. GetImageBitmap
XII. Gestion des données Exif
XII-A. GetExifData
XII-B. SetExifData
XII-C. GenerateThumbnail
XII-D. ImportExifData
XIII. Gestion des Gif animés
XIII-A. GifSetFrame
XIII-B. GifGetFrameCount
XIII-C. GifGetFrameDelay
XIV. Gestion des textures
XIV-A. TextureAddFromFile
XIV-B. TextureAddFromImage
XIV-C. TextureAddFromControl
XIV-D. TextureDel
XIV-E. TextureTranslate
XIV-F. TextureWidth
XIV-G. TextureHeight
XV. Gestion des polices de caractères
XV-A. FontPrivateAddFromFile
XV-B. FontPrivateAddFromByte
XV-C. FontsPrivateDelete
XV-D. FontsEnumerate
XVI. Les fonctions de conversion
XVI-A. ImgToCtrlX et ImgToCtrlY
XVI-B. CtrlToImgX et CtrlToImgY
XVI-C. PointsToPixelsX et PointsToPixelsY
XVI-D. PixelToPointsX et PixelToPointsY
XVII. Les autres fonctions utiles
XVII-A. GetPixel
XVII-B. LongToRGB
XVII-C. SetXPTheme
XVII-D. SetDoubleBufferXP
XVII-E. DragForm
XVII-F. FontSizeToPixel
XVII-G. PixelToFontSize
XVII-H. GetUserFormHandle
XVII-I. GetClientHandle
XVII-J. PathIsImage
XVIII. Les propriétés
XVIII-A. ImageWidth et ImageHeight
XVIII-B. ImageFormat
XVIII-C. RefControl
XVIII-D. PenAlignMode
XVIII-E. FastRepaintReplace
XVIII-F. WrapX et WrapY
XVIII-G. DrawSmooth
XVIII-H. DrawWithoutTransparency
XVIII-I. FillTexture
XVIII-J. PenTexture
XVIII-K. IconBackColor
XVIII-L. AntialisingLevel
XIX. Conclusion
XX. Les téléchargements


I. Introduction

GDI et GDI+ sont des librairies graphiques.
En d'autres termes ce sont des fonctions que l'on peut appeler depuis nos programmes en ayant pris soin auparavant de les déclarer : ce sont les fameuses API.
La librairie GDI est intégrée à toutes les versions de Windows, elle contient des fonctions de dessins basiques et ne sait gérer que le format Bitmap (BMP)

Pour pallier le manque de fonctionnalités de la librairie GDI, Microsoft a développé une autre librairie : GDI+ (ou GdiPlus).
Cette seconde librairie est beaucoup plus puissante et reconnaît en autre le format Jpeg et les données Exif intégrées aux images Jpeg, notamment par les appareils photos numériques.

La classe clGdiPlus, dont cet article est la documentation, encapsule ces API pour faciliter leur utilisations.

Exemples d'images obtenues grâce à cette classe : :


La carte de France est dessinée à partir des coordonnées des départements.
Les départements sont encadrés au passage de la souris, et on peut les sélectionner en cliquant dessus.
Des cercles de couleur matérialisent l'emplacement de certaines villes.



Les aiguilles de l'horloge se déplacent en fonction de l'heure.
Si on tire sur une aiguille l'heure change.


II. Remarques préalables


II-A. Remarques

- L'unité utilisée par cette classe est le pixel.

- La classe est développée sur Access 2003 au format Access 2000; j'essaye autant que je peux d'assurer la meilleure compatibilité avec les autres versions.

- Dans tous mes exemples je nomme clGdip l'instance de la classe et Image0 le contrôle image.

- Les paramètres optionnels sont notés : [NomduParamètre] = ValeurParDéfaut

- Si non mentionné, les fonctions renvoient False (Faux) en cas d'échec (ou Vrai si succès).


II-B. Pré-requis

Il est nécessaire de posséder la librairie GDI+ de Microsoft.
Cette librairie est incorporée à Windows XP.
La librairie est en téléchargement pour les systèmes d'exploitation suivants (Windows 2000; Windows 98; Windows ME; Windows NT; Windows XP; Windows Vista) :

Lien vers la libraire en téléchargement sur Microsoft.com
Le fichier gdiplus.dll doit être placé dans le répertoire de l'application.

Remarque pour Office 2007 :
Utilisez la version 2007 de clGdiplus si vous souhaitez vous passer de la librairie gdiplus.dll.
En effet Office 2007 installe une version de gdiplus dans les fichiers communs.
Il n'est alors plus nécessaire de déployer le fichier gdiplus.dll dans ce cas.

Toutes versions : Télécharger la classe au format texte (HTTP)

Pour Office 2007 : Télécharger la classe au format texte pour Access 2007 (HTTP)


II-C. Compatibilité avec Excel

Pour utiliser la classe ClGdiPlus avec Excel, recherchez la constante de compilation Access ; remplacez :

    #Const Access = True
    			
par

    #Const Access = False
    			

Le dessin se fait alors dans un contrôle sur un UserForm.


III. Les fonctions de création et de sauvegarde


III-A. OpenFile

Ouvre un fichier.

Charge l'image en mémoire.
On peut ensuite accéder aux données Exif ou modifier l'image.

La fonction renvoie Vrai si le fichier a pû être ouvert.

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier image
[pThumbNail]=False Boolean Mettre à True pour ouvrir la miniature Exif
[pIcon]=False Boolean Mettre à True pour ouvrir l'icone associée au fichier

III-B. CloseFile

Ferme le fichier (ou le bitmap créé avec CreateBitmap).

Pensez à refermer l'image dès que possible pour libérer de la mémoire.

Seul une image peut être ouverte à la fois : la fonction CloseFile n'a donc pas besoin de paramètre.


III-C. CreateBitmap

Création d'une image vierge.
L'image est créée en mémoire; on peut ensuite dessiner sur cette image.

Paramètres :


Paramètre Type Explication
pWidth Long Largeur de l'image
pHeight Long Hauteur de l'image
[pResolution] = 96 Single Resolution de l'image (96 par défaut)

III-D. CreateBitmapForImage

Création d'une image vierge.
L'image a la taille du contrôle donné en paramètre.
L'image est créée en mémoire; on peut ensuite dessiner sur cette image.

Paramètres :


Paramètre Type Explication
pImgCtrl Contrôle Contrôle qui détermine la taille de l'image.
[pResolution] = 96 Single Resolution de l'image (96 par défaut)

III-E. SaveFile

Sauvegarde l'image dans un fichier.

La fonction renvoie Vrai si le fichier a pû être sauvegardé.

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier de sauvegarde.
Il n'est pas possible d'écraser le fichier courant.
pFormat String Format du fichier : JPG,GIF,BMP,PNG,TIF.
[pQuality]=-1 Integer Qualité Jpeg (0-100)
Ne spécifiez pas ce paramètre pour garder la qualité de l'image d'origine.

III-F. SaveTransformFile

Sauvegarde l'image dans un fichier avec transformation (sans perte Jpeg).

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier de sauvegarde.
Il n'est pas possible d'écraser le fichier courant.
pTransformation String Transformation à appliquer

Exemple :
Rotation d'une image sans perte de qualité

If ClGdip.OpenFile("C:\MonFichier.jpg") then
    If ClGdip.SaveTransformFile("C:\MonFichierAvecRotation.jpg",EncoderValueTransformRotate90) then
        MsgBox "Image tournée et sauvegardée"
    End If
End If
				

III-G. SaveJpegLossLess

Sauvegarde l'image dans un fichier sans perte Jpeg.

A utiliser si uniquement modification de donnée Exif par exemple.

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier de sauvegarde.
Il n'est pas possible d'écraser le fichier courant.

Exemple :
Function de changement de la date du cliché

' Change le tag DateTimeOriginal d'une image
Public Function ChangeImageDateTime(ByVal pPath As String, ByVal pDate As Date) As Boolean
    Dim clGdip As ClGdiPlus
    On Error GoTo Gestion_Erreurs
    ' Création nouvelle instance de classe
    Set clGdip = New ClGdiPlus
    ' Ouverture du fichier
    clGdip.OpenFile pPath
    ' Exif : Mise à jour de la date du cliché
    If clGdip.SetExifData(TagDateTimeOriginal, pDate) Then
        ' Sauvegarde de l'image dans un autre fichier
        If clGdip.SaveJpegLossLess(pPath & ".backup") Then
            ' Fermeture du fichier initial
            clGdip.CloseFile
            ' Supprime le fichier original
            Kill pPath
            ' Renomme l'image avec le nom d'origine
            Name pPath & ".backup" as  pPath
            ChangeImageDateTime = True
         End If
    End If
    ' Libère l'instance de classe
    Set clGdip = Nothing
    On Error GoTo 0
    Exit Function
Gestion_Erreurs:
    Set clGdip = Nothing
    ChangeImageDateTime = False
End Function
				

IV. Autres fonctions de lecture / écriture de l'image


IV-A. GetPixels

Renvoie un tableau de pixels avec les couleurs ARGB

Paramètres :


Paramètre Type Explication
pPixels Tableau de Byte Tableau de points ARGB

La fonction renvoi un tableau de pixels ARGB.
A = Alpha = Transparence
R = Red = Rouge
G = Green = Vert
B = Blue = Bleu

Les valeurs sont comprises entre 0 et 255.

Exemple :
Lire les couleurs des pixels

' Tableau pour recevoir les pixels
Dim lPixels() As Byte
' Compteurs
Dim lCptX As Long, lCptY As Long
' Lecture des pixels dans le tableau
lPixels = ClGdip.GetPixels
' Boucle sur les pixels
For lCptX = 1 To UBound(lPixels(), 2)
    For lCptY = 1 To UBound(lPixels(), 3)
        ' Composante bleue = lPixels(1, lCptX, lCptY)
        ' Composante verte = lPixels(2, lCptX, lCptY)
        ' Composante rouge = lPixels(3, lCptX, lCptY)
        ' Composante alpha = lPixels(4, lCptX, lCptY)
    Next
Next
				

IV-B. SetPixels

Redessine l'image à partir un tableau de pixels avec les couleurs ARGB

Paramètres :


Paramètre Type Explication
pPixels Tableau de Byte Tableau de points RGB

Exemple :
Appliquer un filtre rouge sur l'image

' Tableau pour recevoir les pixels
Dim lPixels() As Byte
' Compteurs
Dim lCptX As Long, lCptY As Long
' Lecture des pixels de l'image
lPixels = ClGdip.GetPixels
' On boucle sur les pixels
For lCptX = 1 To UBound(lPixels(), 2)
    For lCptY = 1 To UBound(lPixels(), 3)
        ' On ne garde que la couleur rouge en mettant les deux autres composantes à zéro
        ' Annule la composante bleue
        lPixels(1, lCptX, lCptY) = 0
        ' Annule la composante verte
        lPixels(2, lCptX, lCptY) = 0
        ' Composante bleue = lPixels(1, lCptX, lCptY)
        ' Composante verte = lPixels(2, lCptX, lCptY)
        ' Composante rouge = lPixels(3, lCptX, lCptY)
        ' Composante alpha = lPixels(4, lCptX, lCptY)
    Next
Next
' On réinjecte les couleurs dans l'image
ClGdip.SetPixels lPixels
				

IV-C. SetBitmap

Définit l'image à partir d'un bitmap gdiplus

Voir GetBitmap pour un exemple d'utilisation.

Paramètres :


Paramètre Type Explication
pBitmap Long Identifiant d'un bitmap GdiPlus
[pClone] = Vrai Boolean Si Vrai, clone le bitmap.

IV-D. GetBitmap

Sauvegarde l'image dans un bitmap gdiplus

Paramètres :


Paramètre Type Explication
[pClone] = Faux Boolean Si Vrai, clone le bitmap.

La fonction renvoie un bitmap GdiPlus.

Exemple :
Affecter l'image d'une classe à une autre

' On ne clone pas l'image lors de l'appel à GetBitmap.
' Par compte on clone l'image lors de l'appel à SetBitmap.
' Ainsi on obtient dans la classe clGdipOut un clone de l'image issue de ClGdipIn
' Si on avait cloner deux fois l'image, l'image intérmédiaire ne serait jamais libérée
'		(=fuite de mémoire)
' Si on n'avait pas du tout cloner l'image, chaque classe pointerait vers la même image en mémoire 
'          	(=risque de libérer l'image dans une classe alors que l'autre voudrait encore l'utiliser)
lReturn = ClGdipOut.SetBitmap(ClGdipIn.GetBitmap(False), True)
				

IV-E. SetImageArray

Définit l'image à partir d'un tableau de byte

Voir l'application Inclure des images jpeg dans un objet OLE pour un exemple d'utilisation.

Paramètres :


Paramètre Type Explication
pArray Tableau de Byte Données de l'image.
pAttachment Boolean Mettre à Vrai si les données proviennent d'un champ pièce-jointe (Access >= 2007).

Exemple :
Charge une image à partir d'un champ pièce-jointe

' Timages est le nom de la table
' data est le champ pièce-jointe
' id est un champ texte identifiant de l'image
oGdi.SetImageArray DLookup("data.filedata", "Timages", "id=""btnGIF"""), True
				

IV-F. GetImageArray

Sauvegarde l'image dans un tableau de byte

Voir l'application Inclure des images jpeg dans un objet OLE pour un exemple d'utilisation.

Paramètres :


Paramètre Type Explication
pArray Tableau de Byte Données de l'image.
pFormat String Format du fichier : JPG,GIF,BMP,PNG,TIF.
[pQuality]=-1 Integer Qualité Jpeg (0-100)
Ne spécifiez pas ce paramètre pour garder la qualité de l'image d'origine.

La fonction retourne un tableau de Byte contenant les données brutes de l'image.


IV-G. LoadBitmapFromControl

Création d'un bitmap à partir de l'image contenue dans un contrôle

Paramètres :


Paramètre Type Explication
pCtrl Image Contrôle Image.

IV-H. GetIPictureDisp

Renvoie l'image dans un objet IPictureDisp

Cet objet peut être utilisé pour une image du ruban.


V. Les fonctions de modification de l'image


V-A. ReplaceColor

Remplace une couleur de l'image par une autre.

Paramètres :


Paramètre Type Explication
pOldColor Long Ancienne couleur
pNewColor Long Nouvelle couleur
[pOldAlpha] = -1 Long Ancienne transparence (0 --> 255) Si paramètre omis ou égal à -1, toutes les transparences de 0 à 255 sont traitées
[pNewAlpha] = -1 Long Nouvelle transparence (0 --> 255) Si paramètre omis ou égal à -1, la transparence n'est pas modifiée
[pX1] = -1
[pY1] = -1
[pX2] = -1
[pY2] = -1
Long Coordonnées du rectangle à traiter

Exemple :
Remplace le blanc par la couleur de fond du formulaire

lReturn = ClGdip.ReplaceColor(vbWhite, Me.Section(acDetail).BackColor)
				

V-B. FillColor

Rempli l'image d'une couleur.

Paramètres :


Paramètre Type Explication
pColor Long Couleur de remplissage
[pColorGradient]=-1 Long Couleur pour dégradé
Le dégradé va de la couleur pColor vers la couleur pColorGradient
[pGradientVert] = Faux Boolean Mettre à Vrai pour un dégradé vertical
[pX1] = -1
[pY1] = -1
[pX2] = -1
[pY2] = -1
Long Coordonnées du rectangle à remplir.
[pAlpha] = 255 Integer Transparence (0 --> 255)

Exemple :
Rempli de blanc le quart de l'image en bas à droite

lReturn = ClGdip.FillColor(vbWhite, , , ClGdip.ImageWidth / 2, ClGdip.ImageHeight / 2)
				

V-C. ApplyColorMatrix

Applique une matrice de couleurs à l'image.

Paramètres :


Paramètre Type Explication
pRed, pGreen, pBlue, pAlpha Variant = Tableaux de single de dimension 5 1ère à 3ème valeur: Multiplicateurs des composantes rouge, vert, bleu
4ème valeur : Constante
5ème valeur : Valeur à ajouter
Les valeurs doivents être comprises entre -1 et 1
[pEmptyColor] = 0 Long Couleur de remplissage (-1 pour dessiner par dessus l'image).
Paramètre utile si on utilise de la transparence.
[pX1] = -1
[pY1] = -1
[pX2] = -1
[pY2] = -1
Long Coordonnées du rectangle à traiter.

Exemple :
Appliquer un filtre noir et blanc

        ClGdip.ApplyColorMatrix Array(0.222, 0.707, 0.071, 0, 0), _
                                Array(0.222, 0.707, 0.071, 0, 0), _
                                Array(0.222, 0.707, 0.071, 0, 0), _
                                Array(0, 0, 0, 1, 0), -1
				

V-D. Resize

Redimensionne l'image.

Paramètres :


Paramètre Type Explication
pWidth Long Nouvelle largeur
pHeight Long Nouvelle hauteur
[pAntialise] = Faux Boolean Si vrai alors l'image est lissée
[pKeepExifData] = Faux Boolean Si Vrai alors les données Exif sont réinjectées dans l'image après redimensionnement

Exemple :
Redimensionne l'image à 10% de sa taille d'origine

lReturn = ClGdip.Resize(ClGdip.ImageWidth / 10, ClGdip.ImageHeight / 10)
				

V-E. Crop

Découpe l'image.

Paramètres :


Paramètre Type Explication
[pLeft] = 0 Long Position à gauche
[pTop] = 0 Long Position en haut
[pWidth] = 0 Long Largeur
[pHeight] = 0 Long Hauteur
[pAntialise] = Faux Boolean Si vrai alors l'image est lissée
[pKeepExifData] = Faux Boolean Si Vrai alors les données Exif sont réinjectées dans l'image après le découpage

Exemple :
Découpe le quart haut-gauche de l'image

lReturn = ClGdip.Crop(0, 0, ClGdip.ImageWidth / 2, ClGdip.ImageHeight / 2)
				

V-F. Rotate

Rotation de l'image.

Paramètres :


Paramètre Type Explication
pAngle Long Angle de rotation en degrés
[pKeepExifData] = Faux Boolean Si Vrai alors les données Exif sont réinjectées dans l'image après la rotation

Exemple :
Tourne l'image de 30°

lReturn = ClGdip.Rotate(30)
				

V-G. RotateFlip

Rotation/Miroir de l'image.

Paramètres :


Paramètre Type Explication
pType Long Type de transformation (énumération EGdipRotateFlip)
[pKeepExifData] = Faux Boolean Si Vrai alors les données Exif sont réinjectées dans l'image après la rotation et/ou le mirroir

Exemple :
Retourne l'image horizontalement

lReturn = ClGdip.RotateFlip(RotateNoneFlipX)
				

VI. Les fonctions de dessin


VI-A. DrawPixel

Dessine un pixel.

Paramètres :


Paramètre Type Explication
pX Long Position horizontale du pixel
pY Long Position verticale du pixel
pColor Long Couleur du pixel
[pAlpha] = 255 Integer Transparence du pixel (0 --> 255)

Exemple :
Dessiner un pixel rouge au milieu du contrôle

lReturn = ClGdip.DrawPixel(clgdip.ImageWidth,clgdip.ImageHeight,vbred) 
				

VI-B. DrawLine

Dessine une ligne.

Paramètres :


Paramètre Type Explication
pX1,pY1 Long Position du premier point
pX2,pY2 Long Position du deuxième point
[pPenColor] = vbBlack Long Couleur de la ligne
[pPenWidth] = 1 Long Epaisseur de la ligne
[pDash] = 0 Boolean Pointillés si Vrai
[pAlpha] = 255 Integer Transparence du trait (0 --> 255)
[pArrowLength] = 0 Long Taille des traits de la flèche
Si > 0, affiche une flèche
[pStartAndEnd] = 0 Long Type de départ et de fin du trait (plat, carré, rond, triangle)
Voir énumération EGdipLineCap

Exemple :
Dessiner une ligne bleue pointillée de 4 pixels de large qui traverse le contrôle en diagonal

lReturn = ClGdip.DrawLine(0, 0, ClGdip.ImageWidth, ClGdip.ImageHeight, vbBlue, 4, True)
				

VI-C. DrawRectangle

Dessine un rectangle.

Paramètres :


Paramètre Type Explication
pX1,pY1,pX2,pY2 Long Coordonnées du rectangle
[pBackColor] = -1 Long Couleur de remplissage
   Laisser -1 pour un rectangle transparent.
[pPenColor] = vbBlack Long Couleur de la ligne
[pPenWidth] = 1 Long Epaisseur de la ligne
[pDash] = 0 Boolean Pointillés si Vrai
[pAlpha] = 255 Integer Transparence du trait (0 --> 255)
[pRegion] = "" String Nom de la région à créer avec les mêmes coordonnées

Exemple :
Dessiner un rectangle aléatoire

' pBackColor = -1 siginifie qu'on dessine uniquement la bordure sans le fond
' pPenColor = vbBlue pour dessiner en bleu
lReturn = ClGdip.DrawRectangle(Rnd * ClGdip.ImageWidth, Rnd * ClGdip.ImageHeight, _
                Rnd * ClGdip.ImageWidth, Rnd * ClGdip.ImageHeight, _
                -1, vbBlue, 4)
				

VI-D. DrawEllipse

Dessine une ellipse.

Paramètres :


Paramètre Type Explication
pX1,pY1,pX2,pY2 Long Position de l'ellipse
[pType] = 0 EGdipTypeEllipse Type de positionnement
    Si pType = 0 : On passe un rectangle en paramètre, l'ellipse remplit ce rectangle
          pX1,Y1 : Point Haut-Gauche du rectangle
          pX2,Y2 : Point Bas-Droite du rectangle
    Si pType = 1 : on passe le centre et les rayons de l'ellipse en paramètre
          pX1,pY1 : Centre de l'ellipse
          pX2 : Rayon horizontal
          pY2 : Rayon vertical
[pBackColor] = -1 Long Couleur de remplissage
   Laisser -1 pour une ellipse transparente
[pPenColor] = vbBlack Long Couleur de la ligne
[pPenWidth] = 1 Long Epaisseur de la ligne
[pDash] = 0 Boolean Pointillés si Vrai
[pAlpha] = 255 Integer Transparence du trait (0 --> 255)
[pStartAngle] = Null Single Angle de démarrage d'un arc en degré
[pSweepAngle] = Null Single Angle de balayage d'un arc en degré
[pRegion] = "" String Nom de la région à créer avec les mêmes coordonnées

Exemple :
Dessiner une ellipse au milieu du contrôle

' Dessin d'une ellipse rouge d'épaisseur 2, centrée au mileu du contrôle, remplie de vert, 
'   et de rayons 1/5è de la taille du contrôle
lReturn = ClGdip.DrawEllipse _
        (ClGdip.ImageWidth / 2, ClGdip.ImageHeight / 2, _
         ClGdip.ImageWidth / 5, ClGdip.ImageHeight / 5, 1, _
         vbGreen, vbRed, 2)
				

VI-E. DrawPolygon

Dessine un polygone.

Paramètres :


Paramètre Type Explication
pPoints Variant Tableau de points formant le polygone : Array(X1,Y1,X2,Y2,X3,Y3,...)
[pBackColor] = -1 Long Couleur de remplissage
   Laisser -1 pour un rectangle transparent.
[pPenColor] = vbBlack Long Couleur de la ligne
[pPenWidth] = 1 Long Epaisseur de la ligne
[pDash] = 0 Boolean Pointillés si Vrai
[pAlpha] = 255 Integer Transparence du trait (0 --> 255)
[pRegion] = "" String Nom de la région à créer avec les mêmes coordonnées

VI-F. DrawText

Dessine du texte.

Renvoie un boolean indiquant si le dessin s'est correctement déroulé.

Paramètres :


Paramètre Type Explication
pText String Texte à écrire
   Peut contenir des retours à la ligne (vbCrLf)
pSize Long Taille du texte en pixel
pFontName String Nom de la police (Arial, ...)
pX1,pY1,[pX2] = -1,[pY2] = -1Long Position du texte.
Le texte est écrit dans le rectangle défini par ces coordonnées
Si pX2 et pY2 ne sont pas renseignés, le texte est positionné sur le point de coordonnées pX1,pY1.
[pAlignHoriz] = 0Integer Alignement horizontal
          - 0 : Centre
          - 1 : Gauche
          - 2 : Droite
[pAlignVert] = 0Integer Alignement vertical
          - 0 : Centre
          - 1 : Haut
          - 2 : Bas
[pPenColor] = 0Long Couleur du texte
[pPenAlpha] = 255Integer Transparence du texte (0 --> 255)
[pBackColor] = -1Long Couleur de fond (-1 si transparent)
[pBackAlpha] = -1Integer Transparence du fond (0 --> 255)
[pItalic] = FalseBoolean Italique Vrai/Faux
[pBold] = FalseBoolean Gras Vrai/Faux
[pUnderline] = FalseBoolean Souligné Vrai/Faux
[pStrikeOut] = FalseBoolean Barré Vrai/Faux
[pAntialiase] = FauxBoolean Lisser le texte Vrai/Faux
[pOnlyGetSize] = FauxBoolean Si vrai, n'écrit pas le texte et renvoie la taille du texte dans pX1,pY1,pX2,PY2

Exemple :
Ecrit un texte en haut à gauche de l'image, en bleu

lReturn = ClGdip.DrawText("TEST", 30, "Arial", 0, 0, ClGdip.ImageWidth, ClGdip.ImageHeight, 0, 0, vbBlue)
				

VI-G. DrawImage

Affiche une image de la liste d'images.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pX1,pY1,[pX2],[pY2] Long Position de l'image
     Si pX2 et pY2 sont nuls alors on conserve la taille de l'image
     Si pX2 = 0 ou pY2 =0 alors on calcule la dimension manquante par rapport à l'autre en conservant le rapport hauteur/largeur.
     Si pImgSizeMode = acOLESizeAutoSize :
          pX1,pY1 : Position de l'image
          pX2 : Largeur de l'image
          pY2 : Hauteur de l'image
     Si pImgSizeMode = acOLESizeZoom/acOLESizeStretch/acOLESizeClip :
          pX1,Y1 : Point Haut-Gauche du rectangle contenant l'image
          pX2,Y2 : Point Bas-Droite du rectangle contenant l'image
[pTranspcolor] = -1 Integer Couleur de transparence : les points de cette couleur ne
     seront pas dessinés
[pImgSizeMode] = acOLESizeStretch Integer Type d'affichage de l'image (Echelle par défaut)
[pImgPictureAlignment] = 2 Integer Position de l'image (centrée par défaut)
[pPercent]=255 Integer Pourcentage pour affichage transclucide (0:invisible;255:normal)
[pAntialiase] = Faux Boolean Lisse l'image si Vrai
[pRegion] = "" String Ajoute une région de nom pRegion
[pRegionColor] = -1 Long Si renseigné, la région ajoutée contient les points de couleurs différentes de pRegionColor
[pRegionAlpha] = -1 Long Si renseigné, la région ajoutée contient les points de transparences différentes de pRegionAlpha

VI-H. DrawBitmap

Dessine un bitmap gdiplus sur l'image.

Paramètres :


Paramètre Type Explication
pBitmap Long Identifiant du bitmap GdiPlus
pX1,pY1,[pX2],[pY2] Long Position de l'image
     Si pX2 et pY2 sont nuls alors on conserve la taille de l'image
     Si pX2 = 0 ou pY2 =0 alors on calcule la dimension manquante par rapport à l'autre en conservant le rapport hauteur/largeur.
     Si pImgSizeMode = acOLESizeAutoSize :
          pX1,pY1 : Position de l'image
          pX2 : Largeur de l'image
          pY2 : Hauteur de l'image
     Si pImgSizeMode = acOLESizeZoom/acOLESizeStretch/acOLESizeClip :
          pX1,Y1 : Point Haut-Gauche du rectangle contenant l'image
          pX2,Y2 : Point Bas-Droite du rectangle contenant l'image
[pTranspcolor] = -1 Integer Couleur de transparence : les points de cette couleur ne
     seront pas dessinés
[pImgSizeMode] = acOLESizeStretch Integer Type d'affichage de l'image (Echelle par défaut)
[pImgPictureAlignment] = 2 Integer Position de l'image (centrée par défaut)
[pPercent]=255 Integer Pourcentage pour affichage transclucide (0:invisible;255:normal)
[pAntialiase] = Faux Boolean Lisse l'image si Vrai
[pRegion] = "" String Ajoute une région rectangulaire de nom pRegion
[pRegionColor] = -1 Long Si renseigné, la région ajoutée contient les points de couleurs différentes de pRegionColor
[pRegionAlpha] = -1 Long Si renseigné, la région ajoutée contient les points de transparences différentes de pRegionAlpha

VII. Les fonctions pour gérer la liste d'images


VII-A. ImageListAdd

Ajoute une image à la liste d'image.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
[pFile]="" String Chemin du fichier de l'image
   Si aucun fichier n'est passé en paramètre alors on sauvegarde l'image
   en mémoire dans la liste d'image
[pWidth]=0
[pHeight]=0
Long Taille de l'image
   Si pWidth et pHeight sont nulles toutes les deux l'image conserve sa taille
   Si seulement une des deux tailles est nulles alors l'autre est calculée en
     en conservant les proportions de l'image d'origine.
[pAntialiase] = Faux Boolean Lisse l'image lors du redimensionnement si Vrai.
[pThumbNail] = Faux Boolean Lecture de la miniature intégrée à un Jpeg
(Nécessite GDI+)
[pIcon] = Faux Boolean Si Vrai, extrait l'icone associée au fichier.

VII-B. ImageListGetBitmap

Renvoie le bitmap gdiplus d'une image de la liste.

Voir ImageListAddBitmap pour un exemple d'utilisation.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
[pClone]= Faux Boolean Si Vrai, clone le bitmap lu dans la liste d'images.

VII-C. ImageListAddBitmap

Ajoute une image à la liste d'images à partir d'un bitmap gdiplus.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pBitmap Long Identifiant d'un bitmap GdiPlus
[pClone]= True Boolean Si Vrai, clone le bitmap avant de l'insérer dans la liste d'images.

Exemple :
Passage d'une image d'une classe à un autre classe

' On ne clone pas l'image lors de l'appel à ImageListGetBitmap.
' Par compte on clone l'image lors de l'appel à ImageListAddBitmap.
' Ainsi on obtient dans la classe clGdipOut un clone de l'image issue de ClGdipIn
' Si on avait cloner deux fois l'image, l'image intérmédiaire ne serait jamais libérée
'		(=fuite de mémoire)
' Si on n'avait pas du tout cloner l'image, chaque classe pointerait vers la même image en mémoire 
'          	(=risque de libérer l'image dans une classe alors que l'autre voudrait encore l'utiliser)
lReturn = ClGdipOut.ImageListAddBitmap("MonImage", ClGdipIn.ImageListGetBitmap("MonImage", False), True)
				

VII-D. ImageListAddRect

Ajoute une image à la liste d'images à partir d'une portion de l'image courante.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pX1,pY1,pX2,pY2 Long Coordonnées du rectangle à copier.

VII-E. ImageListAddFromControl

Ajoute une image à la liste d'images à partir de l'image intégrée à un contrôle.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pCtrl Image Contrôle image contenant l'image à charger.

VII-F. ImageListAddFromArray

Ajoute une image à la liste d'images à partir d'un tableau de byte.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pArray Tableau de Byte Données de l'image, équivalent au contenu d'un fichier image jpeg, png, gif, ...
pAttachment Boolean Mettre à Vrai si les données proviennent d'un champ pièce-jointe (Access >= 2007).

Exemple :
Charge une image à partir d'un champ pièce-jointe

' Timages est le nom de la table
' data est le champ pièce-jointe
' id est un champ texte identifiant de l'image
oGdi.ImageListAddFromArray "IdImage", DLookup("data.filedata", "Timages", "id=""btnGIF"""), True
				

VII-G. ImageListAddPictureMask

Ajoute une image à la liste d'images à partir à partir d'un bitmap et d'un masque gdi32.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pPicture Long Identifiant d'un bitmap gdi32.
pMask Long Identifiant d'un masque gdi32.
pBackColor Long Couleur de fond de l'image.

VII-H. ImageListNew

Crée une image vierge dans la liste d'images.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image
pWidth Long Largeur de l'image
pHeight Long Hauteur de l'image

VII-I. ImageListExists

Teste si l'image existe déjà dans la liste.
La fonction renvoie Vrai si l'image est déjà dans la liste

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image

VII-J. ImageListDel

Supprime une image de la liste d'images.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image

VII-K. ImageListDelAll

Supprime toutes les images de la liste d'images.



VII-L. ImageListClone

Clone une image de la liste d'image.

Paramètres :


Paramètre Type Explication
pNameSource String Identifiant de l'image source
pNameDest String Identifiant de l'image destination

VII-M. ImageListWidth

Largeur d'une image de la liste.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image

VII-N. ImageListHeight

Hauteur d'une image de la liste.

Paramètres :


Paramètre Type Explication
pName String Identifiant de l'image

VII-O. ImageListGetIPictureDisp

Renvoie l'image dans un objet IPictureDisp

Cet objet peut être utilisé pour une image du ruban.


Paramètre Type Explication
pName String Identifiant de l'image

VII-P. Fonctions de dessin / transformation / gif animés

Les fonctions de dessin / transformation / gif animés existent également pour les images de la liste d'images.

Ces fonctions ont un préfixe ImageList et acceptent les même paramètres que les fonctions originales.

Le premier paramètre supplémentaire PImage est le nom de l'image de la liste.

Liste de ces fonctions:


Nom de la fonction Description
ImageListDrawImage Affiche une image de la liste d'images sur une autre image de la liste
ImageListDrawBitmap Dessine un bitmap gdiplus sur une image de liste
ImageListDrawLine Dessine une ligne sur une image de la liste
ImageListDrawPixel Dessine un pixel sur une image de la liste
ImageListDrawRectangle Dessine un rectangle sur une image de la liste
ImageListDrawEllipse Dessine une ellipse sur une image de la liste
ImageListDrawPolygon Dessine un polygone sur une image de la liste
ImageListDrawText Dessine du texte sur une image de la liste
ImageListGetPixel Renvoi la couleur d'un pixel d'une image de la liste
ImageListGetPixels Renvoi un tableau de long contenant les pixels d'une image de la liste
ImageListSetPixels Injecte un tableau de byte contenant les pixels dans une image de la liste
ImageListRotate Rotation d'une image de la liste
ImageListRotateFlip Rotation/Miroir d'une image de la liste
ImageListResize Redimensionne une image de la liste
ImageListCrop Découpe une image de la liste
ImageListCrop Découpe une image de la liste
ImageListFillColor Remplit une image de la liste d'une couleur
ImageListReplaceColor Remplace une couleur d'une image de la liste
ImageListApplyColorMatrix Applique une matrice de couleurs à une image de la liste
ImageListGifSetFrame Change l'image courante d'un gif animé de la liste d'image
ImageListGifGetFrameCount Nombre d'images d'un gif animé de la liste d'images
ImageListGifGetFrameDelay Delais d'affichage des images d'un gif animé de la liste d'images

VIII. Les fonctions de transformations

Ces fonctions appliquent une transformation au contexte d'affichage.
Les opérations de dessin effectuées se verront appliquer ces transformations.


VIII-A. WorldRotate

Effectue une rotation.
Cette rotation a pour point pivot le point en haut à gauche.

Paramètres :


Paramètre Type Explication
pAngle Single Angle de rotation en degrés
pRight Boolean Mettre à True pour ajouter cette transformation après la transformation active.
Sinon elle est effectuée avant.

VIII-B. WorldTranslate

Effectue une translation.

Paramètres :


Paramètre Type Explication
pdX Single Translation horizontale
pdY Single Translation verticale
pRight Boolean Mettre à True pour ajouter cette transformation après la transformation active.
Sinon elle est effectuée avant.

VIII-C. WorldScale

Effectue une mise à l'échelle.

Paramètres :


Paramètre Type Explication
psX Single Mise à l'échelle horizontale
psY Single Mise à l'échelle verticale
pRight Boolean Mettre à True pour ajouter cette transformation après la transformation active.
Sinon elle est effectuée avant.

VIII-D. WorldReset

Annule les transformations.



VIII-E. WorldPush

Sauvegarde les transformations.
Restaurez avec WolrdPop.


VIII-F. WorldPop

Restaure les transformations préalablement sauvegardées avec WolrdPush.



IX. Les fonctions de restitution de l'image à l'écran


IX-A. RepaintControl

Injecte l'image dans un contrôle.

Paramètres :


Paramètre Type Explication
pControl Image Contrôle dans lequel est injecté l'image
[pResizeBefore]=False Boolean Si Vrai, redimensionne l'image avant
[pResizeAntialise]=False Boolean Anti-aliasing lors du redimensionnement
[pUseEMF]=False Boolean Pour ACCESS uniquement : Utilisation du type d'image EMF
A essayer pour améliorer la qualité de l'image dessinée.
Affichage de l'image dans le contrôle Image0 avec redimensionnement et lissage

                    clGdip.RepaintControl Me.Image0,True,True
				

IX-B. RepaintControlNoFormRepaint

Injecte l'image dans un contrôle, mais ne la dessine que temporairement.
Cette fonction peut être utilisée pour réduire les scintillements (ou "flash") à l'écran.
Il peut y avoir des légers décalages d'un ou deux pixels, qu'on peut essayer de corriger avec la fonction FastRepaintSetCorrection et/ou en retirant les bordures de l'image.

Paramètres :


Paramètre Type Explication
pControl Image Contrôle dans lequel est injecté l'image
[pResizeBefore]=False Boolean Si Vrai, redimensionne l'image avant
[pResizeAntialise]=False Boolean Anti-aliasing lors du redimensionnement
[pUseEMF]=False Boolean Pour ACCESS uniquement : Utilisation du type d'image EMF
A essayer pour améliorer la qualité de l'image dessinée.

IX-C. FastRepaint

Dessine directement sur le formulaire.
L'affichage est plus rapide mais temporaire.
Il peut y avoir des légers décalages d'un ou deux pixels, qu'on peut essayer de corriger avec la fonction FastRepaintSetCorrection et/ou en retirant les bordures de l'image.

Paramètres :


Paramètre Type Explication
pImgCtrl Image Contrôle déterminant l'emplacement de l'image
[pTranspColor] = -1 Long Couleur à ne pas dessiner.
[pPercent] = 255 Integer Transparence (0 à 255).
[pAntialiase] = Faux Boolean Lisse l'image si Vrai.
[phDc] = 0 Long Handle d'un device contexte si connu.
[phWnd] = 0 Long Handle d'une fenêtre si connu.

IX-D. FastRepaintSetCorrection

Corrections pour la fonction FastRepaint.

*Dest pour correction sur le formulaire.
*Src pour correction sur l'image dessiné.

Paramètres :


Paramètre Type Explication
pLeftDest, pLeftSrc Long Correction à gauche
pTopDest, pTopSrc Long Correction à droite
pWidthDest, pWidthSrc Long Correction de largeur
pHeightDest, pHeightSrc Long Correction de hauteur

IX-E. FastRepaintSetClipControl

Définit l'emplacement à redessiner avec le fonction FasRepaint.

Permet de placer des contrôles sur l'images et de ne pas dessiner par dessus si on utilise la fonction FastRepaint.

Paramètres :


Paramètre Type Explication
pCtrl Contrôle Contrôle dont l'emplacement est à inclure ou exclure
pInclude Boolean Si Vrai, le contrôle spécifié délimite un rectangle qui sera redessiné à l'appel de la fonction FastRepaint.
Si Faux, le contrôle spécifié délimite un rectangle qui ne sera pas redessiné.
pCorrectLeft Long Correction à gauche en pixels
pCorrectTop Long Correction en haut en pixels
pCorrectRight Long Correction à droite en pixels
pCorrectBottom Long Correction en bas en pixels

IX-F. FastRepaintResetClip

Réinitialise l'emplacement à redessiner avec le fonction FasRepaint.

Après l'appel de cette fonction, l'image entière est à nouveau dessinée.



X. Les fonctions pour gérer les régions


X-A. CreateRegionEllipse

Ajoute une région elliptique.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region
pX1,pY1,pX2,pY2 Long Position de l'ellipse
[pType] = 0 EGdipTypeEllipse Type de positionnement
     Si pType = 0 : On passe un rectangle en paramètre, l'ellipse remplit ce rectangle
          pX1,Y1 : Point Haut-Gauche du rectangle
          pX2,Y2 : Point Bas-Droite du rectangle
     Si pType = 1 : on passe le centre et les rayons de l'ellipse en paramètre
          pX1,pY1 : Centre de l'ellipse
          pX2 : Rayon horizontal
          pY2 : Rayon vertical

X-B. CreateRegionPolygon

Ajoute une région polygonale.
   Pensez à fermer le polygone pour créer une région.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region
pPoints Variant Tableau de points formant le polygone
Array(X1,Y1,X2,Y2,X3,Y3,...)

X-C. CreateRegionRect

Ajoute une région rectangulaire.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region
pX1,pY1 Long Point Haut-Gauche du rectangle
pX2,pY2 Long Point Bas-Droite du rectangle

X-D. DeleteRegion

Supprime une région.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region à supprimer

X-E. DeleteAllRegions

Supprime toutes les régions.


X-F. FrameRegion

Dessine un trait qui encadre la région.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region
[pPenColor] = vbBlack Long Couleur du trait
[pPenWidth] = 1 Long Epaisseur du trait
[pDash] = 0 Boolean Pointillés si Vrai
[pAlpha] = 255 Integer Transparence du trait (0 --> 255)
[pInside] = Faux Boolean Encadre à l'intérieur si Vrai

X-G. FillRegion

Remplit une region d'une couleur.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region
[pColor] = vbBlack Long Couleur de remplissage
[pColorGradient] = -1 Long Deuxième couleur pour dégradé
[pGradientVert] = Faux Boolean Mettre à Vrai pour un dégradé vertical
[pAlpha] = 255 Integer Transparence du remplissage (0 --> 255)

X-H. HatchRegion

Hachure une région.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la region
[pColor] = vbBlack Long Couleur de remplissage
[pBackColor] = -1 Long Deuxième couleur pour le fond
[pStyle] = 0 Long Type de hachure (énumeration EGdipHatchStyle)
[pAlpha] = 255 Integer Transparence des hachures(0 --> 255)

X-I. GetRegionXY

Identifie la region située sur un point.

Paramètres :


Paramètre Type Explication
pX Long Position X du point
pY Long Position Y du point
[pInclude] Variant Tableau de régions à inclure
[pExclude] Variant Tableau de régions à exclure

La fonction renvoie le nom de la région située sur le point précisé.

Exemple :
Recherche l'identifiant de la région sous le curseur de la souris

Private Sub Image0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
	Dim lRegion As String       ' Region survolée
	' On convertit les coordonnées vers des coordonnées images en pixels avec CtrlToImgX et CtrlToImgY
	lRegion = ClGdip.GetRegionXY(ClGdip.CtrlToImgX(X, Me.Image0), ClGdip.CtrlToImgY(Y, Me.Image0))
End Sub
						


X-J. PointInRegion

Teste si un point est dans une region.

Paramètres :


Paramètre Type Explication
pX Long Position X du point
pY Long Position Y du point
pRegion String Nom de la région à tester

La fonction renvoie Vrai si le point est dans la région précisée en paramètre.


X-K. GetRegionRect

Coordonnées rectangulaires d'une région.

Paramètres :


Paramètre Type Explication
pRegion String Identifiant de la région.
pX1, pY1, pX2, pY2 Long Coordonnées du rectangle contenant la région.

X-L. RegionExists

Teste si une région existe.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région à tester

La fonction renvoie Vrai si la région existe.


X-M. RegionAddRegion

Ajoute une région à une autre région.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région cible
pRegionToAdd String Nom de la région à ajouter

La fonction renvoie Vrai si l'opération est réussie.


X-N. RegionCombine

Combine deux régions.

Paramètres :


Paramètre Type Explication
pRegion1 String Nom de la première région
Cette région reçoit la région résultante de la combinaison
Attention : La fonction FrameRegion ne fonctionnera plus pour cette région.
pRegion2 String Nom de la deuxième région
pCombineMode Long Mode de combinaison
Voir l'énumération EGdipCombineMode.

X-O. CreateRegionFromColor

Ajoute une région définie par la couleur des points.

Attention : il n'est pas possible d'encadrer cette région avec la fonction FrameRegion.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région à créer
[pColor]=-1 Long Couleur déterminant la région
[pAlpha]=-1 Long Transparence déterminant la région
pIncludeColor Boolean - Vrai : La région contient les points de couleur pColor et de transparence pAlpha
- Faux : La région contient les points de couleur différente de pColor et de transparence différente de pAlpha
[pPointX]=-1, [pPointY]=-1 Long Si renseigné, seuls les points adjacents sont traités (à la manière du pot de peinture de paint)

X-P. ScaleRegion

Redimensionne une région.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région
pScaleX, pScaleY Single Facteurs de redimensionnement

X-Q. TranslateRegion

Déplace une région.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région
pdX, pdY Single Nombre de pixels de déplacement

X-R. RotateRegion

Applique une rotation à une région.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région
pAngle Single Angle en degré
pCenter Booléen Si vrai, le rectangle contenant la région est recentré après rotation

X-S. RegionsIntersect

Teste si deux régions ont une intersection.

La fonction renvoie Vrai si les deux régions ont une intersection.

Paramètres :


Paramètre Type Explication
pRegion1 String Nom de la première région
pRegion2 String Nom de la deuxième région
Si ce paramètre est laissé vide, il sera renseigné avec la première région trouvée qui a une intersection avec pRegion1

X-T. RegionClone

Clone une région.

Paramètres :


Paramètre Type Explication
pRegion String Nom de la région à cloner
pRegionClone String Nom de la région clone

X-U. SetFormRegion

Limite l'affichage de formulaire a une région.

Paramètres :


Paramètre Type Explication
pForm Formulaire Le formulaire à limiter
pRegion String Nom de la région
[pCtrlRef]=Nothing Image Contrôle image de référence
A utiliser si la région a été créée par rapport à l'image
pInverseRegion Boolean Si Vrai, la région est inversée
[pCorrectionLeft]=0 Single Correction de position gauche de la région en pixel
[pCorrectionTop]=0 Single Correction de position haute de la région en pixel
[pCorrectionWidth]=0 Single Correction de largeur de la région en pixel
[pCorrectionHeight]=0 Single Correction de hauteur de la région en pixel

X-V. ResetFormRegion

Rétablit l'affichage du formulaire complet.

Paramètres :


Paramètre Type Explication
pForm Formulaire Le formulaire à rétablir

XI. Sauvegarde d'images en mémoire


XI-A. KeepImage

Sauvegarde l'image en mémoire

Paramètres :


Paramètre Type Explication
[PImage]="Default" String Nom de la sauvegarde

L'image est sauvegardée en mémoire, prête à être rétablie avec la fonction ResetImage.


XI-B. ResetImage

Rétablit l'image de la mémoire

Paramètres :


Paramètre Type Explication
[PImage]="Default" String Nom de la sauvegarde

XI-C. ImageExists

Test si une image sauvegardée existe en mémoire.

Paramètres :


Paramètre Type Explication
[PImage]="Default" String Nom de la sauvegarde à tester

XI-D. DeleteImage

Supprime une image en mémoire.

Paramètres :


Paramètre Type Explication
[PImage]="Default" String Nom de la sauvegarde à supprimer

XI-E. DeleteAllImages

Supprime toutes les images en mémoire.

Paramètres :



XI-F. GetImageBitmap

Renvoie le bitmap gdiplus d'une image.

Paramètres :


Paramètre Type Explication
[PImage]="Default" String Nom de la sauvegarde à supprimer
[pClone]= Faux Boolean Si Vrai, clone le bitmap.

XII. Gestion des données Exif


XII-A. GetExifData

Renvoie la valeur du tag EXIF.

Paramètres :


Paramètre Type Explication
pTag Long Identifiant du tag Exif à lire
Voir l'énumération EGdipTagName

Renvoie la valeur du tag dans un Variant.
Renvoie Null si le tag n'existe pas.


XII-B. SetExifData

Ecrit certains tags Exif.

Paramètres :


Paramètre Type Explication
pTag Long Identifiant du tag Exif à lire
Voir l'énumération EGdipTagName
pValue Variant Valeur du tag à écrire

Si la valeur passée en paramètre est Null, le tag est supprimé de l'image.


XII-C. GenerateThumbnail

Génère une miniature EXIF intégrée à l'image.

Paramètres :


Paramètre Type Explication
[pSize] = 200 Long Taille maxi de la miniature.
[pQuality] = -1 Long Qualité de la miniature (0 à 100)

XII-D. ImportExifData

Importe les données Exif d'un fichier dans l'image en cours.

Paramètres :


Paramètre Type Explication
pFile String Nom du fichier.
[pExcludeTags] Tableau de Long Tableau de tags Exif à exclure

XIII. Gestion des Gif animés


XIII-A. GifSetFrame

Change l'image courante d'un gif animé.

Paramètres :


Paramètre Type Explication
pFrame Long Numéro de l'image

XIII-B. GifGetFrameCount

Nombre d'images d'un gif animé.



XIII-C. GifGetFrameDelay

Delais d'affichage des images d'un gif animé.

Paramètres :

Renvoie un tableau contenant autant de délais que d'images dans le gif.



XIV. Gestion des textures


Utilisez ensuite les propriétés FillTexture et PenTexture pour choisir la texture à utiliser.



XIV-A. TextureAddFromFile

Ajoute une texture à partir d'un fichier.

Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture
pFile String Chemin du fichier de la texture

XIV-B. TextureAddFromImage

Ajoute une texture à partir d'une image.

Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture
pImgName String Image de la liste d'images contenant la texture

XIV-C. TextureAddFromControl

Ajoute une texture à partir de l'image integrée a un contrôle.

Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture
pCtrl Image Contrôle image contenant la texture

XIV-D. TextureDel

Supprime une texture.

Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture

XIV-E. TextureTranslate

Déplace une texture.

Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture
pDx, pDy Single Deplacements en pixels

XIV-F. TextureWidth

Largeur une texture.

Renvoie la largeur en pixel.
Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture

XIV-G. TextureHeight

Hauteur une texture.

Renvoie la hauteur en pixel.
Paramètres :


Paramètre Type Explication
pName String Identifiant de la texture

XV. Gestion des polices de caractères


Utilisez ensuite les propriétés FillTexture et PenTexture pour choisir la texture à utiliser.



XV-A. FontPrivateAddFromFile

Ajoute une police de caractères privée à partir d'un fichier.

Cette police de caractères ne sera utilisable que dans l'instance de gdiplus où elle a été chargée.

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier de la texture

XV-B. FontPrivateAddFromByte

Ajoute une police de caractères privée à partir d'une image.
Cette police de caractères ne sera utilisable que dans l'instance de gdiplus où elle a été chargée.


Paramètres :


Paramètre Type Explication
pByte tableau de Byte tableau de Byte contenu les données de la police de caractères

XV-C. FontsPrivateDelete

Supprime toutes les polices de caractères privées.

Pas de paramètre



XV-D. FontsEnumerate

Enumère les polices de caractères.

Paramètres :


Paramètre Type Explication
pFonts Collection Collection qui contiendra la liste des polices de caractères.

XVI. Les fonctions de conversion


XVI-A. ImgToCtrlX et ImgToCtrlY

Converti depuis les coordonnées image vers les coordonnées contrôle

On donne des pixels en entrée, on reçoit des points (Excel) ou Twips (Access) en sortie.

Paramètres :


Paramètre Type Explication
pX ou pY Long Abcisse ou ordonnées à convertir
pImgCtrl Image Contrôle Image à utiliser pour la conversion.
[pDecalage] = True Boolean Calcul avec décalage (Position de l'image dans le contrôle)
Définir à Vrai pour convertir une position, à Faux pour convertir une taille.

XVI-B. CtrlToImgX et CtrlToImgY

Converti depuis les coordonnées contrôle vers les coordonnées image

On donne des points (Excel) ou Twips (Access) en entrée, on reçoit des pixels en sortie.

Paramètres :


Paramètre Type Explication
pX ou pY Long Abcisse ou ordonnées à convertir
pImgCtrl Image Contrôle Image à utiliser pour la conversion.
[pDecalage] = True Boolean Calcul avec décalage (Position de l'image dans le contrôle)
Définir à Vrai pour convertir une position, à Faux pour convertir une taille.

XVI-C. PointsToPixelsX et PointsToPixelsY

Converti les Points (Excel) ou Twips (Access) en Pixels

Paramètres :


Paramètre Type Explication
pPointsX
pPointsY
Long Valeur à convertir

La fonction retourne la valeur convertie en Pixels


XVI-D. PixelToPointsX et PixelToPointsY

Converti les Pixels en Points (Excel) ou en Twips (Access)

Paramètres :


Paramètre Type Explication
pPixelsX
pPixelsY
Long Valeur à convertir

La fonction retourne la valeur convertie en Points (Excel) ou en Twips (Access)


XVII. Les autres fonctions utiles


XVII-A. GetPixel

Renvoie la couleur d'un point

Paramètres :


Paramètre Type Explication
pX,pY Long Coordonnées du point

la fonction renvoie la couleur du point dans un Long.

Exemple :
Recherche la couleur du pixel sous le curseur de la souris

Private Sub Image0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)<br/>
	Dim lColor As Long       ' Couleur sous la souris
	' On convertit les coordonnées vers des coordonnées images en pixels avec CtrlToImgX et CtrlToImgY
	lColor = ClGdip.GetPixel(ClGdip.CtrlToImgX(X, Me.Image0), ClGdip.CtrlToImgY(Y, Me.Image0))
End Sub
				

XVII-B. LongToRGB

Conversion code couleur Long vers RGB

Paramètres :


Paramètre Type Explication
pLong Long Valeur de la couleur
pRed Long Composante rouge de la couleur
pGreen Long Composante verte de la couleur
pBlue Long Composante bleue de la couleur

XVII-C. SetXPTheme

Active ou désactive le thème XP pour les contrôles.
Permet de réduire le scintillement de l'image (pour WinXP/Acc2003)
La fonction s'applique sur toute l'application, mais seulement sur les contrôles (les barres de menu, barres de titre, ... conservent le thème XP).
Voir la fonction SetDoubleBufferXP pour réduire les scintillements sans désactiver le thème XP.

Utilisez cette fonction même si vous avez déjà désactivé le thème XP dans les options de la base de données.

Paramètres :


Paramètre Type Explication
[pActive]=True Boolean Vrai pour activer.
Faux pour désactiver.

Exemple :
Réduire les scintillements si la version d'Access est 2003

' Désactive le thème XP pour réduire les scintillements si la version d'Access est 2003
If SysCmd(acSysCmdAccessVer) = "11.0" Then ClGdip.SetXPTheme False			
						

XVII-D. SetDoubleBufferXP

Permet de réduire le scintillement de l'image (pour WinXP/Acc2003)

La fonction de double buffer est gourmande en ressource.
Envisagez l'utilisation de la fonction SetXPTheme pour désactiver le thème XP.

Paramètres :


Paramètre Type Explication
pForm Formulaire Formulaire dont on veut réduire le scintillement
Privilégiez un formulaire de type indépendant (Fen. Indépendante = Oui).
Si la fonction est appliquée sur un formulaire avec la propriété Fen. Indépendante = Non, alors le double buffer s'applique sur toute l'application et peut faire scintiller d'autres objets.
[pActive]=True Boolean Vrai pour activer.
Faux pour désactiver.

Exemple :
Réduire les scintillements si la version d'Access est 2003

' Activer le double buffer pour réduire les scintillements si la version d'Access est 2003
If SysCmd(acSysCmdAccessVer) = "11.0" Then ClGdip.SetDoubleBufferXP Me			
						

XVII-E. DragForm

Permet le déplacement du formulaire
Cette fonction permet de déplacer le formulaire même s'il n'a pas de barre de titre.

Exemple :

Paramètre Type Explication
pForm Formulaire Formulaire à déplacer
Comment déplacer le formulaire en cliquant sur une image

' Remarque : Ne fonctionne pas sur l'événement Click
Private Sub Image0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ClGdip.DragForm Me
End Sub
						

XVII-F. FontSizeToPixel

Conversion taille police en pixel

Convertit une taille de police de caractères en pixel pour la fonction DrawText.
Paramètres :


Paramètre Type Explication
pSize Long Taille de police
pCtrlRef Control Contrôle de référence

XVII-G. PixelToFontSize

Conversion taille police en points

Convertit une taille de police de caractères de pixels en points pour la fonction DrawText.
Paramètres :


Paramètre Type Explication
pPixel Long Taille en pixel
pCtrlRef Control Contrôle de référence

XVII-H. GetUserFormHandle

Identifiant d'un userform

Pour Excel.
Paramètres :


Paramètre Type Explication
pForm Long Objet formulaire
pClientArea Boolean Si Faux, la foncion renvoie l'identifiant du formulaire
Si Vrai, la fonction renvoie l'identifiant de la sous-fenêtre sur laquelle on dessine

XVII-I. GetClientHandle

Identifiant de la sous-fenêtre sur laquelle on dessine (=section).

Pour Access.
Paramètres :


Paramètre Type Explication
pImgCtrl Image Objet image contenu dans la section de laquelle on veut l'identifiant.

XVII-J. PathIsImage

Test si un chemin est celui d'un fichier image valide.

Paramètres :


Paramètre Type Explication
pPath String Chemin du fichier.

Renvoit Vrai si le chemin est celui d'une image valide.


XVIII. Les propriétés


XVIII-A. ImageWidth et ImageHeight

Taille de l'image en pixels

Type Long en Lecture seule.

C'est la taille de l'image en mémoire.


XVIII-B. ImageFormat

Format de l'image

Type string en Lecture seule.

Formats possibles :
Undefined / MemoryBMP / BMP / EMF / WMF / JPEG / PNG / GIF / TIFF / EXIF / ICON.

Dépend du format du fichier ouvert avec OpenFile.
Si l'image est crée avec CreateBitmap ou modifiée après chargement (hors données Exif), le format de l'image est MemoryBMP.


XVIII-C. RefControl

Contrôle de référence pour coordonnées passées en points/twips

Type Control en Lecture/Ecriture.

Si RefControl est défini, les fonctions acceptent des coordonnées passées en Twips (pour Access) ou en Points (Pour Excel).

Pour annuler et repasser en pixels, affectez Nothing à cette propriété.

Exemple :
Affichage d'un pixel rouge à l'emplacement de la souris

' Deux solutions identiques :
'
' 1 - Sans utiliser RefControl
clGdip.DrawPixel clGdip.CtrlToImgX(X, Me.Image0), clGdip.CtrlToImgY(Y, Me.Image0), vbRed
' 
' 2 - En utilisant RefControl
clGdip.RefControl = Me.Image0
clGdip.DrawPixel X, Y, vbRed
clGdip.RefControl = Nothing
				

XVIII-D. PenAlignMode

Alignement du crayon

Type Long en Lecture/Ecriture.

Voir énumération EGdipPenAlignMode
S'applique aux fonctions DrawRectangle, DrawLine, DrawEllipse et DrawPolygon.


XVIII-E. FastRepaintReplace

Mode remplace pour FastRepaint

Type Boolean en Lecture/Ecriture.

Si FastRepaintReplace est vrai, FastRepaint remplace les pixels.
Sinon ils sont dessinés par dessus l'image déjà affichée.



XVIII-F. WrapX et WrapY

Décalage d'une image avec enroulement.

Type Long en Lecture/Ecriture.

S'applique aux fonctions FastRepaint, DrawImage et DrawBitmap.



XVIII-G. DrawSmooth

Dessin avec lissage.

Type Booléen en Lecture/Ecriture.

S'applique aux fonctions de dessin de lignes, polygones et ellipse, ainsi qu'à l'encadrement de région (FrameRegion).



XVIII-H. DrawWithoutTransparency

Dessin des images sans transparence (plus rapide si pas besoin de transparence).

Type Booléen en Lecture/Ecriture.

S'applique aux fonctions de dessin de lignes, polygones et ellipses.



XVIII-I. FillTexture

Texture de remplissage.

Type String en Lecture/Ecriture.

S'applique aux fonctions de dessin de textes, rectangles, polygones et ellipses, ainsi qu'aux fonctions de remplissage (FillColor et FillRegion) .



XVIII-J. PenTexture

Texture de crayon pour les lignes.

Type String en Lecture/Ecriture.

S'applique aux fonctions de dessin de rectangles, polygones et ellipses, ainsi qu'à l'encadrement de région (FrameRegion).



XVIII-K. IconBackColor

Couleur de fond des icones.

Type Long en Lecture/Ecriture.

S'applique aux fonctions de chargement d'image : OpenFile et ImageListAdd.



XVIII-L. AntialisingLevel

Niveau d'antialiasing.

Type Long en Lecture/Ecriture.

Voir énumération EGdipAntialisingLevel.



XIX. Conclusion


La librairie gdiplus.dll offre de nombreuses possibilités graphiques que l'on peut exploiter dans Access.


Merci à l'équipe Office de developpez.com pour ses relectures, commentaires et encouragements!


XX. Les téléchargements




               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2008 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Microsoft Office - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.