vlad2i
Messages postés285Date d'inscriptionmercredi 20 août 2003StatutMembreDernière intervention13 février 2005
-
3 août 2004 à 16:52
deleplace
Messages postés40Date d'inscriptionmardi 4 octobre 2005StatutMembreDerniè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 :)
deleplace
Messages postés40Date d'inscriptionmardi 4 octobre 2005StatutMembreDerniè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
'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)