Newsgroup: it.comp.lang.visual-basic
Titolo: GDI+ e Compressione JPEG

Ciao a tutti,
non mi riesce di impostare la compressione quando salvo un file jpeg
utilizzando le gdi, qualcuno sa dirmi dove sbaglio?
    Dim tSI As GdiplusStartupInput
    Dim lRes As Long
    Dim lGDIP As Long
    Dim lBitmap As Long
    Dim iCompression As Long
    Dim sID As String
    Dim sfname As String
    ' Initialize GDI+
    tSI.GdiplusVersion = 1
    lRes = GdiplusStartup(lGDIP, tSI)
    iCompression = 50
    sfname = "nuovaimg.jpg"
    If lRes = 0 Then
        ' Create the GDI+ bitmap
        ' from the image handle (l'handle è già inizializzato e
caricato con un immagine)
        lRes = GdipCreateBitmapFromHBITMAP(m_hWnd, 0, lBitmap)
        If lRes = 0 Then
            Dim tImgEncoder As GUID
            Dim tParams As EncoderParameters
            ' JPEG Image GUID
            sID = "{557cf401-1a04-11D3-9A73-0000f81ef32e}"
            ' Initialize the encoder GUID
            CLSIDFromString StrPtr(sID), tImgEncoder
            ' Initialize the encoder parameters
                tParams.Count = 2
                ' Compression
                With tParams.Parameter(0)
                    ' Set the Compression GUID
                    CLSIDFromString
StrPtr("{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}"), .GUID
                    .NumberOfValues = 1
                    .type = 4
                    .Value = VarPtr(iCompression)
                End With
            End If
            ' Save the image
            lRes = GdipSaveImageToFile(lBitmap, StrPtr(sfname),
tImgEncoder, tParams)
            ' Destroy the bitmap
            GdipDisposeImage lBitmap
        End If
        ' Shutdown GDI+
        GdiplusShutdown lGDIP
 
    End If

 utilizzando le gdi, qualcuno sa dirmi dove sbaglio?
[snip]
Ma cos'č?
VB6 o VB.Net? 

Ciao,
posso provare a postarti la mia soluzione. Non so se č la piů pulita, ma 
funziona.
  Private Shared Function GetEncoderInfo(ByVal mimeType As String) As 
ImageCodecInfo
          ' Get image codecs for all image formats
          Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
          ' Find the correct image codec
          For i As Integer = 0 To codecs.Length - 1
              If (codecs(i).MimeType = mimeType) Then
                  Return codecs(i)
              End If
          Next i
          Return Nothing
   End Function
Poi, da dove vuoi all'interno del programma per salvare un'immagine:
Dim qualityParam As New EncoderParameter(Encoder.Quality, 100)
             Dim jpegCodec As ImageCodecInfo = GetEncoderInfo("image/jpeg")
             Dim encoderParams As New EncoderParameters(1)
             encoderParams.Param(0) = qualityParam
             img.Save(PERCOSORSOIMMAGINE, jpegCodec, encoderParams)
             encoderParams.Dispose()
dove img č l'immagine (oggetto image) che vuoi salvare.
Se c'č metodo piů elegante non saprei dirti.
Ciao, Morrie

 VB6 o VB.Net?
è VB6 ma usando le api GDI+


Ciao Morrie, se non sbaglio quello che hai scrito è codice 
VB.NET
,
invece io cercavo in VB6 ma in ogni caso ti ringrazio lo stesso
Ho trovato comunque il GUID che server per l'equivalente "Quality" ma
sembra che comunque non ottenga una notevole compressione, sembrerebbe
che una immagine da 2M, che con Adobe viene salvata sui 40kb usando la
stessa impostazione di qualità, con le GDI+ si riesca ad ottentere
solo 900kb.

 
Sì, è codice .NET
Purtroppo non ho molta dimestichezza con il 6 quindi non credo di 
esserti utile. Comunque in giro ho trovato questo:
http://www.vbaccelerator.com/home/VB/Code/vbMedia/Saving_Pictures_to_JPG/Using_Intel_JPG_Library/article.asp
http://www.webcom.com/victor/howto/bmp2jpeg.html
Da quello che ho letto il VB non supporta il salvataggio in maniera 
nativa in jpg ma si appoggia a strumenti esterni. Nel primo link trovi 
un esempio sul come fare ed anche una libreria free che ti permette di 
farlo.
In bocca al lupo!!!
Ciao, Morrie

 >
http://www.vbaccelerator.com/home/VB/Code/vbMedia/Saving_Pictures_to_JPG/Using_Intel_JPG_Library/article.asp
Grazie Morrie il primo link mi è stato utilissimo.
Thk.
Danilo