cs_youcef09
Messages postés1Date d'inscriptionsamedi 18 juillet 2009StatutMembreDernière intervention20 novembre 2012 20 nov. 2012 à 11:07
bonjour
dans le cas où mon fichier tif est composé en plusieurs pages es ce que ce programme l'affiche
cs_VinceVG
Messages postés222Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention30 mars 2016 20 juil. 2011 à 18:48
LA mise à l'échelle se fait mal avec les wmf mais je ne trouve pas comment corriger.
cs_VinceVG
Messages postés222Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention30 mars 2016 20 juil. 2011 à 18:18
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
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és222Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention30 mars 2016 20 juil. 2011 à 17:40
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
Maintenant ceci marche.
J'ai toujours les problèmes d'effacement et de conversion de coordonnées.
cs_VinceVG
Messages postés222Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention30 mars 2016 20 juil. 2011 à 15:32
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.
20 nov. 2012 à 11:07
dans le cas où mon fichier tif est composé en plusieurs pages es ce que ce programme l'affiche
20 juil. 2011 à 18:48
20 juil. 2011 à 18:18
'# 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
20 juil. 2011 à 17:40
Et j'ai modifié l'appel de la fonction GDI+ :
Maintenant ceci marche.
J'ai toujours les problèmes d'effacement et de conversion de coordonnées.
20 juil. 2011 à 15:32
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.