Lire des images PNG et WBMP

vlad2i Messages postés 285 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 13 février 2005 - 3 août 2004 à 16:52
deleplace Messages postés 40 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 2 mars 2009 - 12 févr. 2009 à 21:54
Voila : je voudrais pouvoir décoder, pour un editeur de fichiers, ces deux formats. J'ai déjà trouvé pour (Tif, Psd, Bmp, Jpg, Gif, Avi Divx, Avi Cinepak, MPEG, MPEG-2, Pixar, PICT, Icones et Curseurs :p)

Ce que je sais : pour PNG, on utilise une compression Deflate (comme dans le ZIP), et dès lors, je suppose, la fameuzzz zlib.dll (dont je voudrais me passer :p) sinon je ferais avec, peu importe, mais une petite aide ne serait pas de refus...

L'idée c'est de pouvoir ouvrir, modifier et enregistrer les fichiers dans ces formats, l'idéal étant de me passer des DLL et autres ocx, juste du VB :)

Quelqu'un ?

vlad2i (aïe ca fait mal)

3 réponses

Squall____ Messages postés 65 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 11 septembre 2012
23 déc. 2005 à 01:35
Salut Vlad2i,

ça fait un bail depuis que tu as posé ta question et je me demandais si tu as réussi a trouver la solution depuis...

Je suis dans le même cas que toi a l'époque; je cherche à afficher des images PNG dans une de mes applications.

Sinon quelqu'un pourrais nous aider please ?

Squall
0
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
21 mars 2007 à 21:00
0
deleplace Messages postés 40 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 2 mars 2009
12 févr. 2009 à 21:54
Salut
Moi j'affiche les fichier Tif et Png
en les convertissant en BMP dans un fichier temporaire
en utilisant gdiplus.dll
voici un visioneur d'mages *.bmp;*.jpg;*.gif;*.rle;*.png;*.tif

Private Declare Function GdiplusStartup& Lib "gdiplus" (Token&, inputbuf As Any, Optional ByVal outputbuf&)
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token&)
Private Declare Function GdipLoadImageFromFile& Lib "gdiplus" (ByVal FileName$, image&)
Private Declare Function GdipSaveImageToFile& Lib "gdiplus" (ByVal image&, ByVal FileName$, clsidEncoder As Any, encoderParams As Any)
Private Declare Sub GdipDisposeImage Lib "gdiplus" (ByVal image&)



'Placer un DriveListBox, un DirlistBox, un FileListBox et un Picturebox sur la Form



Private Sub Form_Load()
File1.Pattern = "*.bmp;*.jpg;*.gif;*.rle;*.png;*.tif"
Picture1.AutoSize = True
End Sub



Private Sub Drive1_Change()
Dir1.Path = Left(UCase(Drive1), 2) & ""
File1.Path = Dir1.Path
End Sub



Private Sub Dir1_Click()
File1.Path = Dir1.List(Dir1.ListIndex)
End Sub



Private Sub File1_Click()
Dim P$, F$, TMP$
P = File1.Path
If Len(P) > 3 Then P = P & ""
F = P & File1.FileName
On Error Resume Next
Picture1.Picture = LoadPicture(F)
If Err Then
 TMP = Environ("TMP") & "\TmpBmp.tmp"
 If Convert(F, TMP) Then 'convertit F en bmp vers TMP
  MsgBox "format non reconnu"
 Else
  Picture1.Picture = LoadPicture(TMP)
  Kill TMP
 End If
End If
End Sub



'Cette fonction permet de resoudre presque toutes les conversions d'images utiles
'Bmp,Jpg,Png,Gif,Rle,Tif(pas tous) vers Bmp,Png,Gif,Jpg(Taux réglable)



Function Convert&(Source$, Destination$, Optional Q&)
'si Q=0 :TypConv=0: Convertit en BMP
'si Q=1 :TypConv=6: Convertit en PNG
'si Q=2 :TypConv=2: Convertit en GIF
'si Q>2 :TypConv=1: Convertit en JPG avec le taux de Qualité Q (3 à 100, typiquement 75)



Dim Img&, L&(11), TypConv&, S$, Token&
L(4) = 1



'*** partie non debuggable
'ouvre gdiplus
If GdiplusStartup(Token, L(4)) Then Convert = 18: Exit Function 'GdiplusNotInitialized
Convert = GdipLoadImageFromFile(StrConv(Source, vbUnicode), Img)
If Convert = 0 Then 'lecture image source ok TypConv Q: If TypConv 1 Then TypConv = 6
 If Q > 2 Then 'conversion jpg  TypConv 1: L(5) &H1D5BE4B5: L(6) = &H452DFA4A: L(7) = &HB35DDD9C  L(8) &HEBE70551: L(9) 1: L(10) = 4: L(11) = VarPtr(Q)
 End If L(0) &H557CF400 + TypConv: L(1) &H11D31A04: L(2) = &H739A&: L(3) = &H2EF31EF8
 Convert = GdipSaveImageToFile(Img, StrConv(Destination, vbUnicode), L(0), L(4))
 GdipDisposeImage Img
End If
GdiplusShutdown Token
'fin de la partie non debuggable
End Function
 
'Convert returns:
'0 Ok,GenericError,InvalidParameter,OutOfMemory
'4 ObjectBusy,InsufficientBuffer,NotImplemented,Win32Error
'8 WrongState,Aborted,FileNotFound,ValueOverflow
'12 AccessDenied,UnknownImageFormat,FontFamilyNotFound,FontStyleNotFound
'16 NotTrueTypeFont,UnsupportedGdiplusVersion,GdiplusNotInitialized,PropertyNotFound
'20 PropertyNotSupported





'remarques:
'dans un programme compilé
' GdiplusStartup peut être lancé dans le Form_Load
'et
' GdiplusShutdown lancé par le Form_UnLoad
'le programme est alors indébuggable
'
'pour faire un gif 4,8 ou 16 couleurs à partir d'un bmp,
' il faut un bmp 8 bits à palette réduite à 4,8 ou 16 couleurs
'
'la conversion d'un rle(bmp comprimé) en bmp fabrique un bmp 32bits
'  (utilisable par loadpicture, le rle est directement utilisable)
0
Rejoignez-nous