deleplace
Messages postés
40
Date d'inscription
mardi 4 octobre 2005
Statut
Membre
Dernière intervention
2 mars 2009
13 févr. 2009 à 19:24
Salut
Voici un convertisseur de fichier Tout formats(Bmp,Jpg,Png,Gif,Rle,Tif vers Bmp,Png,Gif,Jpg(Taux réglable)
en les convertissant en BMP dans un fichier temporaire
en utilisant gdiplus.dll
WinSock, j'ai déja utilisé et même transféré des Gigaoctets
j'ai constaté une limite (non documentée) à 1 ou 1.5 Ko par block envoyé
bonne chance
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&)
Private Sub PictureToJpg(P as Oject,FichierJpgCible$,Optional Taux&=75)
'P PictureBox ou autre objet possédant .picture
Dim TMP$
TMP=environ("TMP") & "\TmpBmp.tmp" ' Fichier temporaire dans le dossier "TMP"
SavePicture P.picture,TMP
FileToJpg TMP,FichierJpgCible,Taux
Kill TMP
End Sub
Private Sub ImageToJpg(P as Oject,FileName$,Optional Taux&=75)
'P PictureBox ou autre objet possédant .image
Dim TMP$
TMP=environ("TMP") & "\TmpBmp.tmp"
SavePicture P.image,TMP
FileToJpg TMP,FichierJpgCible,Taux
Kill TMP
End Sub
Private Sub FileToBmp(FichierSource$,FichierBmpCible$)
Convert FichierSource,FichierBmpCible
End Sub
Private Sub FileToJpg(FichierSource$,FichierJpgCible$,Optional Taux&=75)
Convert FichierSource,FichierJpgCible,Taux
End Sub
Private Sub FileToPng(FichierSource$,FichierPngCible$)
Convert FichierSource,FichierPngCible,1
End Sub
Private Sub FileToGif(FichierSource$,FichierGifCible$)
Convert FichierSource,FichierGifCible,2
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)