1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| PROCEDURE DrawImage(vsFilePath est une chaîne, vnTargetDC est un entier,Sx
est un entier, Sy est un entier, vnWidth, vnHeight, vnTransparency est un
réel sur 4 octets= 1, vnAngle est un réel sur 4 octets = 0,pConserveRation =
Vrai)
hTargetGraphics est un entier
hImage est un entier
hImageAttr est un entier
nWidth est un réel sur 4 octets
nheight est réel sur 4 octets
lpColorMatrix est GpColorMatrix
lpSI est GdiplusStartupInput
hGdipToken est un entier
lpOrg est GpPointF
// on allume GDI+
// Il vaudrait mieux ne le FAIRE qu'une fois POUR toutes, au début, mais
ainsi, la FONCTION est directement réutilisable...
// SI on n'Active/désactive PAS GDI+ comme il faut, QUAND il faut, vous
allez FAIRE crasher votre VB.
lpSI:GdiplusVersion = 1
GdiplusStartup( hGdipToken, lpSI)
// on crée un objet de type Graphic, issu de notre hDc
IF GdipCreateFromHDC(vnTargetDC, hTargetGraphics) = Gp_Ok THEN
// Chargement de l'image (PNG/JPG/TIF/GIF/BMP...)
// Toutes les chaînes sont a passer en UNICODE
// on contrebalance la transformation que VB effectue lors des appels
API...
IF GdipLoadImageFromFile(vsFilePath, hImage) = Gp_Ok THEN
// on crée des attributs d'image.
// C'est uniquement nécessaire ici POUR dessiner l'image en smi
transparence
GdipCreateImageAttributes(hImageAttr)
lpColorMatrix:m[1, 1] = 1
lpColorMatrix:m[2, 2] = 1
lpColorMatrix:m[3, 3] = 1
lpColorMatrix:m[4, 4] = vnTransparency
lpColorMatrix:m[5, 5] = 1
FIN
// on renseigne nos attributs (hImageAttr)
GdipSetImageAttributesColorMatrix( hImageAttr, ColorAdjustTypeBitmap, True,
lpColorMatrix, lpColorMatrix, ColorMatrixFlagsSkipGrays)
// on récupère les dimensions de l'image...
IF GdipGetImageDimension(hImage, nWidth, nheight) = Gp_Ok THEN
// SI on ne passe PAS de Dimension (largeur OU hauteur),
// on n'effectue PAS de redimensionnement : on garde les dimensions de
l'image
IF vnWidth = 0 THEN
vnWidth = nWidth
END
IF vnHeight=0 THEN
vnHeight = nheight
END
lpOrg:x = Sx
lpOrg:y = Sy
// on traduit les coordonnées en coordonnées du monde : orientée A vnAngle
degrés
// IF vnAngle <> 0 THEN
// GdipRotateWorldTransform( hTargetGraphics, vnAngle, MatrixOrderPrepend)
// GdipTransformPoints( hTargetGraphics, CoordinateSpaceWorld,
CoordinateSpaceDevice, lpOrg, 1)
// END
// on dessine enfin notre image.
// on aurait pu utiliser GdipDrawImage, OU GdipDrawImageRect, mais elles
ne permettent
// PAS de prendre en compte les attributs (ici la transparence)
lW est un entier = nWidth
lh est un entier = nheight
GdipDrawImageRectRectI( hTargetGraphics, hImage, lpOrg:x , lpOrg:y ,
vnWidth, vnHeight, 0, 0, lW, lh,UnitPixel, hImageAttr)
END
// on détruit nos attributs d'image
GdipDisposeImageAttributes (hImageAttr)
// on libère l'image
GdipDisposeImage( hImage)
END
// on détruit notre objet Graphic
GdipDeleteGraphics (hTargetGraphics)
GdiplusShutdown (hGdipToken) |
Partager