|
|
Visual Basic
Molto spesso si ha la necessità, anche per motivi di spazio, di salvare le immagini in formato JPG. Questa procedura, senza l'utilizzo di dll aggiuntive, sfrutta le chiamate alle librerie GDI+, presenti nei sistemi XP o comunque di ultima generazione, per effettuare questa operazione.
In un modulo dichiariamo la seguente funzione:
Option Explicit ' Dichiarazioni API
Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type
Private Type GdiplusStartupInput GdiplusVersion As Long DebugEventCallback As Long SuppressBackgroundThread As Long SuppressExternalCodecs As Long End Type
Private Type EncoderParameter GUID As GUID NumberOfValues As Long type As Long Value As Long End Type
Private Type EncoderParameters Count As Long Parameter As EncoderParameter End Type
Private Declare Function GdiplusStartup Lib "GDIPlus" ( token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long Private Declare Function GdiplusShutdown Lib "GDIPlus" ( ByVal token As Long) As Long Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" ( ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long Private Declare Function GdipDisposeImage Lib "GDIPlus" ( ByVal Image As Long) As Long Private Declare Function GdipSaveImageToFile Lib "GDIPlus" ( ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long Private Declare Function CLSIDFromString Lib "ole32" ( ByVal str As Long, id As GUID) As Long
' Salva in JPG
Public Sub SaveJPG( ByVal pict As StdPicture, ByVal filename As String, Optional ByVal quality As Byte = 80) Dim tSI As GdiplusStartupInput Dim lRes As Long Dim lGDIP As Long Dim lBitmap As Long
' Inizializza GDI+ tSI.GdiplusVersion = 1 lRes = GdiplusStartup(lGDIP, tSI)
If lRes = 0 Then
' Crea la bitmap GDI+ dall'handle dell'immagine lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)
If lRes = 0 Then Dim tJpgEncoder As GUID Dim tParams As EncoderParameters
' Inizializza la codifica GUID CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder
' Inizializza la codifica dei parametri tParams.Count = 1 With tParams.Parameter ' Qualità ' Imposta la Qualità GUID CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB3505E7EB}"), .GUID .NumberOfValues = 1 .type = 1 .Value = VarPtr(quality) End With
' Salva l'immagine lRes = GdipSaveImageToFile( lBitmap, StrPtr(filename), tJpgEncoder, tParams)
' Elimina la bitmap GdipDisposeImage lBitmap
End If ' Chiude il processo GDI+ GdiplusShutdown lGDIP
End If
If lRes Then Err.Raise 5, , "Non posso salvare l'immagine. Errore GDI+:" & lRes End If
End Sub
|
Per salvare infine l'immagine in formato JPG è sufficiente richiamare la seguente routine (dove Picture1 sarà il controllo picture nel quale è stata caricata l'immagine e può essere visibile o nascosto):
| SaveJPG Picture1, "C:\Percorso\Nomefile.jpg", 80 |
L'ultimo parametro è la qualità dell'immagine, da non confondersi con la compressione che non è parametrizzabile.
Questa procedura si ricorda è valida su sistemi con OS Windows XP o comunque che abbiano installate le liberie GDI+.
(Fonte: MauroRossi.net)
|