Σώζοντας μία εικόνα σε format JPEG με καθορισμένη ποιότητα


Στο παρακάτω tip βλέπουμε μία τυπική περίπτωση αποθήκευσης μίας εικόνας σε format JPEG. Φορτώνουμε μία εικόνα Bitmap σε ένα αντικείμενο Bitmap (προέρχεται από την κλάση Image) και το εμφανίζουμε σε συγκεκριμένες διαστάσεις στη φόρμα, μέσω της ρουτίνας OnPaint. Πατώντας το button της φόρμας γίνεται η αποθήκευση.

http://users.sch.gr/mouratx/VB-NET_Tips/Graphics/Images/SavingJPEG.jpg

 Το κλειδί στην περίπτωση εδώ, είναι να πάρουμε τον κατάλληλο κωδικοποιητή (codec) JPEG (αντικείμενο ImageCodecInfo). Kατόπιν, μέσω της μεθόδου Save, του αντικειμένου Bitmap, σώζουμε με βάση τον κωδικοποιητή JPEG και με παράμετρο κωδικοποίησης την ποιότητα, η οποία καθορίζεται στο αντικείμενο EncoderParameter.

 

Imports System.Drawing
Imports System.Drawing.Imaging

Dim myImage As Bitmap

Protected Overrides Sub OnPaint(ByVal e As _

System.Windows.Forms.PaintEventArgs)


MyBase.OnPaint(e)

'Φόρτωσε την εικόνα στη φόρμα ξεκινώντας από τη θέση 10,10
'με διαστάσεις 150 pixels πλάτος και 120 pixels ύψος.
myImage = New Bitmap("Άνδρος.jpg")
e.Graphics.DrawImage(myImage, 10, 10, 150, 120)

End Sub

'------------------------------------------------------------


'Σώσε την εικόνα σε καθορισμένη ποιότητα JPEG.
Private Sub BtnSaveJPEG_Click(ByVal sender As System.Object,_

                              ByVal e As System.EventArgs) _

Handles BtnSaveJPEG.Click

 

'Καθόρισε την παράμετρο κωδικοποίησης : Ποιότητα στο 60.
Dim myEncoderParameter As New EncoderParameter(Encoder.Quality, 60)

 

'Καθόρισε τον πίνακα των παραμέτρων κωδικοποίησης ότι θα
'περιέχει μία θέση. Σε αυτήν θα βάλουμε την ανωτέρω παράμετρο.

Dim myEncoderParameters As New EncoderParameters(1)
myEncoderParameters.Param(0) = myEncoderParameter

'Πάρε τον κωδικοποιητή για τύπο jpeg.
Dim ecodec As ImageCodecInfo = GetEncoderInfo("image/jpeg")

'Αποθήκευσε την εικόνα κάνοντας χρήση του κωδικοποιητή jpeg με τις
'παραμέτρους που υπάρχουν στον πίνακα κωδικοποιητών.

If Not ecodec Is Nothing Then

myImage.Save("Άνδρος2.jpg", ecodec, myEncoderParameters)
MsgBox("To αρχείο Άνδρος2.jpg δημιουργήθηκε - δείτε, στο φάκελο Bin, ότι πιάνει λιγότερο χώρο", MsgBoxStyle.Information, "Σώσιμο JPEG")

  Else

MsgBox("Δεν μπορώ να δημιουργήσω το αρχείο Άνδρος2.jpg", MsgBoxStyle.Information, "Σώσιμο JPEG")

End If

'Καθάρισε.
myEncoderParameter.Dispose()

myEncoderParameters.Dispose()

 

End Sub


'------------------------------------------------------------


'Επιστρέφει τον κωδικοποιητή με βάση το mimeType.
Private Function GetEncoderInfo(ByVal mimeType$) As ImageCodecInfo

Dim j%
Dim encoders() As ImageCodecInfo

'Πάρε το σύνολο των κωδικοποιητών εικόνων.
encoders = ImageCodecInfo.GetImageEncoders()

'Αλλά εμείς θέλουμε το συγκεκριμένο mimeType.
For j = 0 To encoders.Length - 1

If encoders(j).MimeType = mimeType Then

Return encoders(j)

End If

Next

'Αν δεν βρήκες επέστρεψε Nothing.
Return Nothing

End Function

 

·         Χρήστος Μουρατίδης