Σώζοντας μία εικόνα σε format JPEG με καθορισμένη
ποιότητα
Στο παρακάτω tip βλέπουμε μία τυπική περίπτωση αποθήκευσης μίας εικόνας
σε format JPEG. Φορτώνουμε μία εικόνα Bitmap σε ένα αντικείμενο Bitmap
(προέρχεται από την κλάση Image) και το εμφανίζουμε σε συγκεκριμένες διαστάσεις
στη φόρμα, μέσω της ρουτίνας OnPaint. Πατώντας το button της φόρμας γίνεται η αποθήκευση.
Το κλειδί στην
περίπτωση εδώ, είναι να πάρουμε τον κατάλληλο κωδικοποιητή (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
·
Χρήστος
Μουρατίδης