HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Kép mentése JPG formátumba, tetszőleges tömörítéssel


Példaprogram letöltése

6088 bájt

Ha adott egy tetszőleges kép, vagy akár mi magunk állítunk elő egyet programból, és ezt szeretnénk JPG formátumba menteni, akkor a mellékelt példából megtudható, hogy miként tehetjük meg ezt. A cikkből az is kiderül, hogy a JPG tömörítés/minőség arányt miként szabályozhatjuk az állomány létrehozásakor.

A kép JPG formátumba történő mentéséhez szükségünk lesz magára a képre. Készítsünk hát először is egy egyszerű grafikát, melyet lementhetünk majd egy állományba. A kép kezeléséhez szükségünk lesz egy Bitmap osztályra, melyet úgy hozunk létre, hogy 100 x 100 pixeles legyen. Ahhoz, hogy erre a Bitmap-re rajzolhassunk is, kellene egy Graphics osztály. Ezt úgy tudjuk létrehozni, hogy konstruktorában a Bitmap imént létrehozott példányát adjuk át. Ez biztosítja, hogy a Graphics függvényeit meghívva azok a Bitmap-re rajzoljanak.
  Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
    Dim bmp As New Bitmap(100, 100)
    Dim g As Graphics = Graphics.FromImage(bmp)
Létrehozunk ezek után egy egyszerű grafikát a Bitmap-en.
    Dim r As New Rectangle(0, 0, 100, 100)
    g.FillRectangle(New LinearGradientBrush(r, Color.White, Color.Yellow, 90, False), r)
    g.DrawLine(New Pen(Color.Blue, 3), 0, 0, 100, 100)
    g.DrawEllipse(New Pen(Color.Red, 3), r)
Majd ezek után következik a kép mentésének előkészítése. A mentéshez a Bitmap osztály Save függvényét kell majd használnunk, ennek azonban kell néhány speciális paraméter, hogy a létrehozandó állományból JPG legyen.
Hogy a kép állomány miként legyen kódolva, azt egy ImageCodecInfo osztály pontosan leírja a Save függvénynek. Létrehozunk egy ilyen változót ic névvel.
    Dim ic As ImageCodecInfo = Nothing
Ennek az ic változónak a következőképpen tudunk értéket adni. A rendszerbe telepítéskor felkerül néhány alapértelmezett képkódoló. Ezek között szerepel az is, mely a JPG-t állítja elő. Az ImageCodecInfo osztály GetImageEncoders statikus függvénye egy olyan tömböt ad vissza, mely tartalmazza az összes elérhető kódolót. Nincs más teendőnk, mint egy ciklus segítségével előkeresni a JPG formátumú kódolót, majd ezt tárolni az ic változóba a későbbi felhasználás érdekében.
    Dim ici As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
    Dim c As ImageCodecInfo
    For Each c In ici
      If c.MimeType = "image/jpeg" Then
        ic = c
        Exit For
      End If
    Next c
A Save függvénynek még egy paraméterre szüksége lesz, mely azt határozza meg, hogy a JPG milyen tömörítésű legyen. Ehhez szükségünk lesz egy tömbre, melynek minden eleme egy-egy EncoderParameter típusú osztályt tárol. A tömb minden eleme egy-egy paraméter tulajdonságait tartalmazza. Mostani feladatunkhoz elegendő egy olyan tömb, melynek egy eleme van, hiszen csak a tömörítést szeretnénk előírni a JPG számára. Ezt a tömböt úgy hozzuk létre, hogy készítünk egy EncoderParameters típusú osztályt, melynek konstruktorában adható meg, hogy e tömbnek hány eleme legyen. A létrejött osztály Param property-jén keresztül érhető el a számunkra szükséges tömb.
    Dim ep As New EncoderParameters(1)
A példa kedvéért úgy mentjük el a létrehozott grafikánkat, hogy egy ciklus segítségével a legnagyobb tömörítéstől kezdve a legkisebbig mindegyiket kipróbálva létrehozunk egy-egy JPG állományt. Mivel a tömörítés mértékét százalékosan adhatjuk meg 0 és 100 közötti számmal, így a nullától tízig tartó ciklusunk változóját szorozzuk majd tízzel.
    Dim i As Long
    For i = 0 To 10
A már létrehozott tömb első elemébe kerül az EncoderParameter osztály, melynek konstruktorában két paramétert adunk meg. Az egyik az Encoder felsorolt típus Quality eleme lesz, mely azt írja elő, hogy a megadandó érték a kép minőségére vonatkozik, vagyis minél nagyobb a megadott szám, annál jobb minőségű képet kapunk, viszont a kép tömörítése annál kisebb lesz, így nagyobb helyet foglal majd el az állomány. A második paraméterben kell megadnunk a képminőség/tömörítés értékét.
      ep.Param(0) = New EncoderParameter(Encoder.Quality, i * 10)
Ezt követően már jöhet a Bitmap osztály Save függvénye, ahol első paraméterként a képállomány nevét adjuk meg, másodikként egy képkódoló osztályra van szükség, mely ImageCodecInfo típusú, végül jöhet az EncoderParameters típusú osztály, melyben a mentéshez szükséges paramétereket soroltuk fel.
      bmp.Save(Convert.ToChar(i + 65) + "_" + (i * 10).ToString() + ".jpg", ic, ep)
    Next i
  End Sub 'button1_Click

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |