// GDI.WDL
// Utilisation de l'api GDIPLUS
// Version : 1.0A
// Date : 12/04/2003
// Auteur :  JL 
// Classe ralise et teste avec wd7.5 75203m sous XP Pro.


Cette classe utilise l'api Gdiplus.dll  installer dans le rpertoire systme 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 insrer la bibliothque gdi.wdl dans votre projet. Menu Projet, Bibliothques Externes.


Dclaration :
/////////////

  gdi est un GdiP


Les mthodes de cette classe :


- ChargeImage(nom de fichier) 
/////////////////////////////
	
	Charge une image en mmoire. 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 zro si erreur



- Rotation(val_image , typerotation ) 
/////////////////////////////////////
	
	Rotation de l'image en mmoire.
	Retourne un 'status' voir + bas

	  Diffrents 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 mmoire sur le disque.
	fichier de style "c:\monrepertoire\monimage.jpeg"
	Attention : Gdi+ ne permet pas de sauvegarder une image charge en mmoire sous le mme nom.
		Vous devez donc la sauvegarder sous un nom diffrents et la renommer par la suite si vous voulez conserver le mme 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 mmoire d'un rel sur 4 octets qui va recevoir la Largeur
	pointeur2 correspond  l'adresse mmoire d'un rel sur 4 octets qui va recevoir la Hauteur
	Retourne un 'status' voir + bas


- ResolutionVerticale(val_image)
////////////////////////////////


	Donne la rsolution verticale de l'image en dpi.
	Retourne la rsolution dans un rel sur 4 octets



- ResolutionHorizontale(val_image)
//////////////////////////////////

	Donne la rsolution horizontale de l'image en dpi.
	Retourne la rsolution dans un rel sur 4 octets

- PetiteImage(val_image,largeur,hauteur)
////////////////////////////////////////

	Cration d'une copie de l'image charge en mmoire 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)
////////////////////////

	Libration de l'image charge en mmoire.




Les status retourns :
**********************

  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 :
***********************

- Rcuprer les dimensions d'une image et la rsolution :

	gdi est un GdiP
	
	monimage est un entier sur 4 octets = gdi:ChargeImage("c:\hakinen1.jpg")
	
	SI monimage ALORS
		
		largeur1 est un rel sur 4 octets
		hauteur1 est un rel 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 rel sur 4 octets = gdi:ResolutionVerticale(monimage)
	
		Trace("Rsolution Verticale : "+rv)
		
		rh est un rel sur 4 octets = gdi:ResolutionHorizontale(monimage)
	
		Trace("Rsolution 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 mme nom que le chargeimage
		gdi:Sauve_Image(monimage,"c:\hakinen1_copie.jpg",1)
		gdi:LibereImage(monimage)
		
		// si on veut garder le mme nom pour l'image aprs 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
	
	

- Cration 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 rel sur 4 octets
		hauteur1 est un rel 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
