Exemple d'utilisation de gdi+ dans vb6

Soyez le premier à donner votre avis sur cette source.

Vue 18 565 fois - Téléchargée 3 562 fois

Description

Simple petit exemple de l'utilisation de GDI+ dans VB6

Je vous invite a consulter la doc MSDN pour voir toutes les fonctions et possibilités offertes par GDI+

Conclusion :


ici, le dessin d'une image pouvant être de type jpg, bmp, tif, gif, png

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_youcef09
Messages postés
1
Date d'inscription
samedi 18 juillet 2009
Statut
Membre
Dernière intervention
20 novembre 2012
-
bonjour
dans le cas où mon fichier tif est composé en plusieurs pages es ce que ce programme l'affiche
cs_VinceVG
Messages postés
222
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2016
-
LA mise à l'échelle se fait mal avec les wmf mais je ne trouve pas comment corriger.
cs_VinceVG
Messages postés
222
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2016
-
J'ai ajouté un bout de code pour conserver les proportions. Je mets du coup ma modif en entier. Pour effacer, je dessine un carré de la couleur du fond ce qui n'est pas trés académique et qui va vite atteindre ses limites. Si qqn a une idée je suis preneur.

'# Permet de dessiner une image issue d'un fichier, en la redimensionnant si nécessaire, et en appliquant un % de translucidité
'**** ByRef voImage As BitMap -- L'image à transmettre
'**** ByVal vnTargetDC As Long -- Le handle de la fenêtre où tracer l'image
'**** ByVal vnX As Long -- Position x (le centre de l'image)
'**** ByVal vnY As Long -- Position y (le centre de l'image)
'**** Optional ByVal vnWidth -- Largeur facultative
'**** Optional ByVal vnHeight -- Hauteur facultative
'**** Optional ByVal vnTransparency As Single = 1 -- Transparence Facultatif entre 0 et 1 : pourcentage de transparence
'**** Optional vnAngle As Single = 0 -- Angle de rotation Facultatif en degrés
Public Sub DrawImage(ByRef voImage As BitMap, ByVal vnTargetDC As Long, ByVal vnX As Long, ByVal vnY As Long, Optional ByVal vnWidth, Optional ByVal vnHeight, Optional ByVal vnTransparency As Single 1, Optional vnAngle As Single 0)
Dim hTargetGraphics As Long
Dim hImageAttr As Long
Dim lpColorMatrix As GpColorMatrix
Dim lpOrg As GpPointF
Dim PortionImageX As Long
Dim PortionImageY As Long
Dim LargeurFinale As Long
Dim HauteurFinale As Long

'# On crée un objet de type Graphic, issu de notre hDc
If GdipCreateFromHDC(vnTargetDC, hTargetGraphics) = Gp_Ok Then
'# On crée des attributs d'image.
'# C'est uniquement nécessaire ici pour dessiner l'image en semi transparence
GdipCreateImageAttributes hImageAttr

With lpColorMatrix
.m(0, 0) = 1
.m(1, 1) = 1
.m(2, 2) = 1
.m(3, 3) = vnTransparency
.m(4, 4) = 1
End With

'# On renseigne nos attributs (hImageAttr)
GdipSetImageAttributesColorMatrix hImageAttr, ColorAdjustTypeBitmap, True, lpColorMatrix, lpColorMatrix, ColorMatrixFlagsSkipGrays

'# Si on ne passe pas de dimension (largeur ou hauteur),
'# On n'effectue pas de redimensionnement : on garde les dimensions de l'image
If IsMissing(vnWidth) Then
vnWidth = voImage.Width
End If
If IsMissing(vnHeight) Then
vnHeight = voImage.Height
End If

PortionImageX = voImage.Width
PortionImageY = voImage.Height

LargeurFinale = (vnHeight * PortionImageX) / PortionImageY
HauteurFinale = vnWidth
If LargeurFinale > vnHeight Then
LargeurFinale = vnHeight
HauteurFinale = (vnWidth * PortionImageY) / PortionImageX
End If


lpOrg.X = vnX
lpOrg.Y = vnY

'# On traduit les coordonnées en coordonnées du monde : orientée à vnAngle degrés
If vnAngle <> 0# Then
GdipRotateWorldTransform hTargetGraphics, vnAngle, MatrixOrderPrepend
GdipTransformPoints hTargetGraphics, CoordinateSpaceWorld, CoordinateSpaceDevice, lpOrg, 1
End If

'# 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)
GdipDrawImageRectRectI hTargetGraphics, voImage.Handle, lpOrg.X + LargeurFinale * -0.5, lpOrg.Y + HauteurFinale * -0.5, LargeurFinale, HauteurFinale, 0, 0, PortionImageX, PortionImageY, UnitPixel, hImageAttr

'# On détruit nos attributs d'image
GdipDisposeImageAttributes hImageAttr

'# On détruit notre objet Graphic
GdipDeleteGraphics hTargetGraphics
End If
End Sub
cs_VinceVG
Messages postés
222
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2016
-
Pour l'ajustement au rectangle de destination j'ai un rien modifié le code. J'ai rajouté la capture de la taille de l'image :
Dim PortionImageX As Long
Dim PortionImageY As Long
.
.
.
PortionImageX = voImage.Width
PortionImageY = voImage.Height

Et j'ai modifié l'appel de la fonction GDI+ :
GdipDrawImageRectRectI hTargetGraphics, voImage.Handle, lpOrg.X, lpOrg.Y, vnWidth, vnHeight, 0, 0, PortionImageX, PortionImageY, UnitPoint, hImageAttr


Maintenant ceci marche.
J'ai toujours les problèmes d'effacement et de conversion de coordonnées.
cs_VinceVG
Messages postés
222
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
30 mars 2016
-
Merci pour ce code que j'arrive à utiliser dans word 2010 en vba.

Par contre je n'arrive pas :
- à effacer un image,
- à lui changer sa taille (mise à l'échelle).

Je n'ai pas non plus trouvé comment convertir les coordonnées d'un élément de ma fenêtre (form 2.0) vers la position de l'image. C'est moins crucial je peux quand même coder directement la position pour les 2 ou 3 images que j'aurais à mettre.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.