Image PNG

Résolu
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 - 17 mai 2007 à 14:48
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 18 mai 2007 à 18:40
bonjour
voila à l'aide d'un CommonDialog je vais chercher une image pour l'inserer
dans un pictureBox.
mais comment faire pour aller chercher des images au format "png".
merci
@ plus
petchy
A voir également:

48 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 mai 2007 à 19:24
C'est bien dommage : en 5 lignes de code, tu lève la limitation du picturebox de vb :

dim lBitmap as Long
dim lGraphics as Long

        Call GdipCreateFromHDC(Picture1.hdc, lGraphics)
        Call GdipCreateBitmapFromFile("c:\image.png", lBitmap)
        Call GdipDrawImage(lGraphics, lBitmap, 0, 0)
        Call GdipDeleteCachedBitmap(lBitmap)
        Call GdipDeleteGraphics(lGraphics)
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 19:29
si c' est ça, il suffirait donc que je confectionne une sub
et je passe ma picturebox en param ...ça m' éviterais
de reproduire les declars, non ?

<hr />
© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !
<h5>(Rolling, mon poisson rouge)
</h5>
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
17 mai 2007 à 19:39
Re
merci DARKSIDIOUS  pour tous ses renseignements sur le GDI+,
mais j'ai essayé d'insérer un PNG dans mon picturebox mais j'ai toujours la meme erreur ,je ne comprends pas ou il faut mettre les codes pour avoir un PNG.
petchy
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 mai 2007 à 19:40
Tout à fait chaibat !

petchy : montre moi au moins ton code, sans cà je vois pas trop ce que je peux faire pour toi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
17 mai 2007 à 19:43
voila le code de ma form

Private Sub Form_Load()
Dim GpInput  As GdiplusStartupInput
    GpInput.GdiplusVersion = 1
   
    If GdiplusStartup(token, GpInput) <> Ok Then
       MsgBox "Erreur chargement GDI+ !", vbCritical
       Unload Me
       End If
       Dim lBitmap As Long
Dim lGraphics As Long


        Call GdipCreateFromHDC(Picture1(1).hdc, lGraphics)
        Call GdipCreateBitmapFromFile("c:\image.png", lBitmap)
        Call GdipDrawImage(lGraphics, lBitmap, 0, 0)
        Call GdipDeleteCachedBitmap(lBitmap)
        Call GdipDeleteGraphics(lGraphics)


TailleReel.AutoSize = True
Picture1(0).AutoRedraw = True
Picture1(1).AutoRedraw = True
End Sub

Private Sub Command2_Click()
CommonDialog1.DialogTitle = "Ouvrir une image..."
    CommonDialog1.Filter = "Images (*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF;*.ICO)|*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF;*.ICO"
    CommonDialog1.ShowOpen
     If CommonDialog1.filename <> "" Then
Text2.Text = CommonDialog1.filename
End If
End Sub

voila
merci
petchy
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 mai 2007 à 19:52
Mais ce code dans l'événement paint du picturebox et non dans le load (sinon, c'est normal que tu ne vois rien car le DC du picturebox n'est certainement pas encore crée !).

Dim lBitmap As Long
Dim lGraphics As Long         Call GdipCreateFromHDC(Picture1(1).hdc, lGraphics)
        Call GdipCreateBitmapFromFile("c:\image.png", lBitmap)
        Call GdipDrawImage(lGraphics, lBitmap, 0, 0)
        Call GdipDeleteCachedBitmap(lBitmap)
        Call GdipDeleteGraphics(lGraphics)

(il faut bien entendu que tu renomme le nom du fichier avec le fichier que tu veux afficher !).
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
17 mai 2007 à 20:14
RE
voila,j'ai mis le code dans l'evenement paint,mais j'ai une erreur (en rouge)
Private Sub Picture1_Paint(Index As Integer)
Dim lBitmap As Long
Dim lGraphics As Long
Dim HDC
        Call GdipCreateFromHDC(Picture1(1).HDC, lGraphics)
        Call GdipCreateBitmapFromFile("c:\image.png", lBitmap)
        Call GdipDrawImage(lGraphics, lBitmap, 0, 0)
        Call GdipDeleteCachedBitmap(lBitmap)
        Call GdipDeleteGraphics(lGraphics)




End Sub
petchy
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 20:21
voilà ce que j' ai fait


1° J' ai coché GDI+ dans les références du Projet
(c' est ce que tu dois faire petchy pour éviter l' erreur)
2° Public Sub PAR_DS(xPicture As PictureBox, xPath As String)


Dim lBitmap As Long
Dim lGraphics As Long


        Call GdipCreateFromHDC(xPicture.hDC, lGraphics)
        Call GdipCreateBitmapFromFile(xPath, lBitmap)
        Call GdipDrawImage(lGraphics, lBitmap, 0, 0)
        Call GdipDeleteCachedBitmap(lBitmap)
        Call GdipDeleteGraphics(lGraphics)


End Sub


3° Dans une feuille
Private Sub cmdCharger_Click()
  Call PAR_DS(Me.Picture1, App.Path & "\temp.png")
End Sub


puis dans la Sub Paint de la PictureBox




il n' y' a pas d' erreur, mais ça marche pas !
j' ai mis HasDC de PictureBox une fois à False et une fois à True
et toujours rien ...
J' ai raté quelque chose ?


 





<hr />






© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !







 
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 mai 2007 à 21:32
N'oublie pas le :
If GdiplusStartup(token, GpInput) <> Ok Then
       MsgBox "Erreur chargement GDI+ !", vbCritical
End If

Sans cà ca ne marchera pas !

Essaye également de passer le scalemode de ton picturebox à vbPixels
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 21:54
Hop là ! Et tape là !
ça marche...!

Merci d' avoir rester et ...résister ...

<hr />
© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !
<h5>(Rolling, mon poisson rouge)
</h5>
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 21:57
oh la bourde !
Merci d' être rester et d' avoir ...résister ...
La joie m' a fit perdre mon latin ...

<hr />
© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !
 
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
17 mai 2007 à 21:58
Salut à tous,
ça marche très bien dans le Load
l'AutoSize marche pas parceque c'est une image et pas une picture
faut modifier la taille du PictureBox avant de l'afficher

Dim token As Long

Private Sub Form_Load()
    Dim GpInput   As GdiplusStartupInput
    Dim lBitmap   As Long
    Dim lGraphics As Long
    Dim xWidth    As Long
    Dim xHeight   As Long
   
    GpInput.GdiplusVersion = 1
    If GdiplusStartup(token, GpInput) <> Ok Then
       MsgBox "Erreur chargement GDI+ !", vbCritical
       Unload Me
       End If
   
    Picture1.AutoRedraw = True
    Call GdipCreateBitmapFromFile("C:\IMAGES\01.png", lBitmap)
    Call GdipGetImageWidth(lBitmap, xWidth)
    Call GdipGetImageHeight(lBitmap, xHeight)
    Picture1.Width = ScaleX(xWidth + 4, vbPixels, Me.ScaleMode)
    Picture1.Height = ScaleY(xHeight + 4, vbPixels, Me.ScaleMode)
    Call GdipCreateFromHDC(Picture1.hDC, lGraphics)
    Call GdipDrawImageI(lGraphics, lBitmap, 0, 0)
    Call GdipDisposeImage(lBitmap)
    Call GdipDeleteGraphics(lGraphics)

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
   Call GdiplusShutdown(token)
End Sub

Daniel
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 22:13
c' est vrai . La picture ne s' adapte pas à l taille de l' image...
j' ai intégré ton code et j' ai une erreur sur ScaleX .
Une précision ?

<hr />
© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !
(Ro
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
17 mai 2007 à 22:31
ha bon ? c'est pourtant la bibliothèque VB:  Me.ScaleX Me.ScaleY
t'es peut-être en VBA alors ?
si tu l'as pas met directement la Forme en pixels ça évite les conversions
(ou si c'est en Twips multiplie par 15 ou par Screen.TwipsPerPixelX)

' c'est + 4 ou + 2 suivant que la PictureBox est en 3D ou pas
    Picture1.Width = (xWidth  + 4) * 15
    Picture1.Height = (xHeight + 4) * 15

Daniel
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 22:39
alors c' est
Picture1.Width = Me.ScaleX(xWidth + 4, vbPixels, Me.ScaleMode)
et non
Picture1.Width = ScaleX(xWidth + 4, vbPixels, Me.ScaleMode)
t' as peut être un Width Me ...
<hr />
© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !
(Ro
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
17 mai 2007 à 22:41
non non j'ai pas de Width Me
c'est par défaut, comme quand tu fais Caption au lieu de Me.Caption
ou ScaleMode au lieu de Me.ScaleMode

Daniel
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
17 mai 2007 à 22:50
non, non c' est parce que j' ai fait tout le code dans une sub
placée dans un module.Donc obligé de mettre xFm.ScaleX
j' ai juste passé le nom du Form en paramètre et ça marche !
La pictureBox est redimentnnée selon la taillede l' image.
 Hop là ! Top là ! toi aussi...:-)
Merci pour l' amélioration...

<hr />
© - En ce moment, c' est que pour Cannes...Mais moi aussi je tourne !
(Ro
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
18 mai 2007 à 10:34
bonjour à tous
un grand merci pour toutes vos réponses
j'ai mis GDI+ dans les références projet et je n'est plus d'erreur.
mais les photos je vais les cherchers avec un CommonDialog et la il me refuse de les mettres dans ma picturebox, désolé,mais depuis hier je me prends la tête avec ça.
enfin,je vais continué et on verra bien.
@ plus
petchy.
ps:si vous avez un exemple,pourriez vous me l'envoyé
merci
[mailto:pascalecas@aol.com pascalecas@aol.com]
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 mai 2007 à 11:50
L'exemple on te l'a mit un peu plus haut.

Montre nous ton code pour voir ce qui cloche
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
18 mai 2007 à 12:18
Re
voila le code je l'ait mis dans le load de la form
et la ça fontionne car j'ai il va chercher l'image dans le dossier que j'ai créer,enfin l'image et en petit meme tout petit.
mais moi je voudrais aller chercher l'image avec mon commondialog si c'est possible bien sur.
Private Sub Form_Load()
 Dim GpInput   As GdiplusStartupInput
    Dim lBitmap   As Long
    Dim lGraphics As Long
    Dim xWidth    As Long
    Dim xHeight   As Long
   
    GpInput.GdiplusVersion = 1
    If GdiplusStartup(token, GpInput) <> Ok Then
       MsgBox "Erreur chargement GDI+ !", vbCritical
       Unload Me
       End If
   
    Picture1(1).AutoRedraw = True
    Call GdipCreateBitmapFromFile("C:\IMAGE\logo.png", lBitmap)
    Call GdipGetImageWidth(lBitmap, xWidth)
    Call GdipGetImageHeight(lBitmap, xHeight)
    Picture1(1).width = Me.ScaleX(xWidth + 2, vbPixels, Me.ScaleMode)
    Picture1(1).height = Me.ScaleY(xHeight + 2, vbPixels, Me.ScaleMode)
    Call GdipCreateFromHDC(Picture1(1).hdc, lGraphics)
    Call GdipDrawImageI(lGraphics, lBitmap, 0, 0)
    Call GdipDisposeImage(lBitmap)
    Call GdipDeleteGraphics(lGraphics)


End Sub
Petchy
0
Rejoignez-nous