Ultimi Articoli
Visual Basic
Connessione a Database Microsoft SQL
Visual Basic
I controlli ListBox e ComboBox
ASP
Verificare l'esistenza di un file sul Server
Visual Basic
Informazioni aggiuntive sugli ActiveX
Visual Basic
Installare un file .inf

Visual Basic

LEZIONI - SALVARE IMMAGINI I FORMATO JPG UTILIZZANDO GDI+



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)