// GDI.WDL // Utilisation de l'api GDIPLUS // Version : 1.0A // Date : 12/04/2003 // Auteur : °¨¨ JL ¨¨° // Classe réalisée et testée avec wd7.5 75203m sous XP Pro. Cette classe utilise l'api Gdiplus.dll à installer dans le répertoire système de windows. Cette dll est incluse dans XP et .Net Server, pour W98, NT4 SP6, W2000 et Millennium, vous pouvez la downloader (gdiplus_dnld.exe) sur : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=BFC0B436-9015-43E2-81A3-54938B6F4614 ou http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm Vous devez insérer la bibliothèque gdi.wdl dans votre projet. Menu Projet, Bibliothèques Externes. Déclaration : ///////////// gdi est un GdiP Les méthodes de cette classe : - ChargeImage(nom de fichier) ///////////////////////////// Charge une image en mémoire. format jpg,bmp,gif,tiff et png nom de fichier de style "c:\monrepertoire\monimage.jpeg" Retourne un entier sur 4 octets contenant un 'handle' de l'image ou zéro si erreur - Rotation(val_image , typerotation ) ///////////////////////////////////// Rotation de l'image en mémoire. Retourne un 'status' voir + bas Différents types de rotation RotateNoneFlipNone = 0, Rotate90FlipNone = 1, Rotate180FlipNone = 2, Rotate270FlipNone = 3, RotateNoneFlipX = 4, Rotate90FlipX = 5, Rotate180FlipX = 6, Rotate270FlipX = 7, RotateNoneFlipY = Rotate180FlipX, Rotate90FlipY = Rotate270FlipX, Rotate180FlipY = RotateNoneFlipX, Rotate270FlipY = Rotate90FlipX, RotateNoneFlipXY = Rotate180FlipNone, Rotate90FlipXY = Rotate270FlipNone, Rotate180FlipXY = RotateNoneFlipNone, Rotate270FlipXY = Rotate90FlipNone - Sauve_Image(val_image , fichier , type) ///////////////////////////////////////// Sauvegarde de l'image en mémoire sur le disque. fichier de style "c:\monrepertoire\monimage.jpeg" Attention : Gdi+ ne permet pas de sauvegarder une image chargée en mémoire sous le même nom. Vous devez donc la sauvegarder sous un nom différents et la renommer par la suite si vous voulez conserver le même nom, voir ex plus bas. type -> type de fichier 1 -> jpg ou jpeg 2 -> bmp 3 -> gif 4 -> tiff 5 -> png Retourne un 'status' voir + bas - Dimensions_Get(val_image est un entier , pointeur1 est un entier , pointeur2 est un entier ) ////////////////////////////////////////////////////////////////////////////////////////////// Donne les dimensions de l'image en pixel. pointeur1 correspond à l'adresse mémoire d'un réel sur 4 octets qui va recevoir la Largeur pointeur2 correspond à l'adresse mémoire d'un réel sur 4 octets qui va recevoir la Hauteur Retourne un 'status' voir + bas - ResolutionVerticale(val_image) //////////////////////////////// Donne la résolution verticale de l'image en dpi. Retourne la résolution dans un réel sur 4 octets - ResolutionHorizontale(val_image) ////////////////////////////////// Donne la résolution horizontale de l'image en dpi. Retourne la résolution dans un réel sur 4 octets - PetiteImage(val_image,largeur,hauteur) //////////////////////////////////////// Création d'une copie de l'image chargée en mémoire de la dimension que vous voulez. largeur est un entier sur 4 octets contenant la largeur que vous voulez hauteur est un entier sur 4 octets contenant la hauteur que vous voulez Retourne un entier sur 4 octets contenant le 'handle' de la copie. - LibereImage(val_image) //////////////////////// Libération de l'image chargée en mémoire. Les status retournés : ********************** Ok = 0, GenericError = 1, InvalidParameter = 2, OutOfMemory = 3, ObjectBusy = 4, InsufficientBuffer = 5, NotImplemented = 6, Win32Error = 7, WrongState = 8, Aborted = 9, FileNotFound = 10, ValueOverflow = 11, AccessDenied = 12, UnknownImageFormat = 13, FontFamilyNotFound = 14, FontStyleNotFound = 15, NotTrueTypeFont = 16, UnsupportedGdiplusVersion = 17, GdiplusNotInitialized = 18, PropertyNotFound = 19, PropertyNotSupported = 20 Exemple d'utilisation : *********************** - Récupérer les dimensions d'une image et la résolution : gdi est un GdiP monimage est un entier sur 4 octets = gdi:ChargeImage("c:\hakinen1.jpg") SI monimage ALORS largeur1 est un réel sur 4 octets hauteur1 est un réel sur 4 octets res est un entier = gdi:Dimensions_Get( monimage, &largeur1, &hauteur1) si res = 0 alors Trace("Largeur : "+largeur1) Trace("Hauteur : "+hauteur1) sinon trace("Erreur -> Status retourné : "+res) trace(erreurinfo()) fin rv est un réel sur 4 octets = gdi:ResolutionVerticale(monimage) Trace("Résolution Verticale : "+rv) rh est un réel sur 4 octets = gdi:ResolutionHorizontale(monimage) Trace("Résolution Horizontale : "+rh) gdi:LibereImage(monimage) FIN - Chargement, Rotation et sauvegarde d'une image gdi est un GdiP monimage est un entier sur 4 octets = gdi:ChargeImage("c:\hakinen1.jpg") SI monimage ALORS gdi:Rotation(monimage,4) // RotateNoneFlipX // sauvegarde sous un autre nom // car gdiplus n'accepte pas de sauvegarder // l'image sous le même nom que le chargeimage gdi:Sauve_Image(monimage,"c:\hakinen1_copie.jpg",1) gdi:LibereImage(monimage) // si on veut garder le même nom pour l'image après la rotation // alors // suppression de l'original fSupprime("c:\hakinen1.jpg") // on renomme la copie pour l'original fRenomme("c:\hakinen1_copie.jpg","c:\hakinen1.jpg") FIN - Création d'une vignette d'une image gdi est un GdiP monimage est un entier sur 4 octets = gdi:ChargeImage("c:\hakinen1.jpg") SI monimage ALORS largeur1 est un réel sur 4 octets hauteur1 est un réel sur 4 octets SI gdi:Dimensions_Get(monimage,&largeur1,&hauteur1) = 0 ALORS nouvellelargeur est un entier sur 4 octets = largeur1*25/100 // 25% de la largeur originale nouvellehauteur est un entier sur 4 octets = hauteur1*25/100 // 25% de la hauteur originale monimage2 est un entier sur 4 octets = gdi:PetiteImage(monimage,nouvellelargeur,nouvellehauteur) SI monimage2 ALORS gdi:Sauve_Image(monimage2,"c:\hakinen_vignette.jpg",1) gdi:LibereImage(monimage2) FIN FIN gdi:LibereImage(monimage) FIN - Chargement d'une image et sauvegarde sous un autre format gdi est un GdiP monimage est un entier sur 4 octets = gdi:ChargeImage("c:\hakinen1.jpg") SI monimage ALORS res est un entier = gdi:Sauve_Image(monimage,"c:\hakinen1.tiff",4) SI res<>0 ALORS Trace("erreur : status -> : "+res) FIN gdi:LibereImage(monimage) FIN