home | suche | kontakt/johner | institut studierende | tech-docs | mindmailer |
![]() |
Zum Ausführen der später folgende Kompressionsmethode write wird ImageWriteParam (mit der vom User angegebenen Qualität) und ImageOutputStream erzeugt.
ImageWriter writer = ImageIO.getImageWritersByFormatName( "jpg" ).next(); ImageOutputStream ios = ImageIO.createImageOutputStream( out ); writer.setOutput( ios ); ImageWriteParam iwparam = new JPEGImageWriteParam( Locale.getDefault() ); iwparam.setCompressionMode( ImageWriteParam.MODE_EXPLICIT ) ; iwparam.setCompressionQuality( this.quality );
Die eigentliche Komprimierung findet in der Hilfsfunktion write statt. Wobei diese Methode sogenannte Native Methods zur Hilfe nimmt um die Kompression durchzuführen. Die Native Methods sind in C-Code geschrieben, daher wird hier auf Code Beispiele verzichtet und lediglich die Funktion im Hintergrund beschrieben.
writer.write( null, new IIOImage(img, null, null), iwparam );
Die im Hintergrund ablaufende Funktionsweise:
1. Farbumwandlung von RGB in YUV
Der YUV- Farbraum (meist YCbCr) kodiert ein Bild unter der Berücksichtigung der menschlichen Wahrnehmung. Die Bandbreite der Farben wird reduziert, dadurch werden mögliche Übertragungsfehler verborgen.
Der RGB- Wert wird einerseits in die Grundhelligkeit Y (für den Grünanteil) unterteilt, andererseits in die Komponenten Cb (Abweichung von grau nach blau) und Cr (Abweichung von grau nach rot).
2. Unterabtastung (Datenreduktion)
In diesem Schritt werden die einzelnen Daten des Images mit weniger als der doppelten Bandbreite abgetastet.
3. 8x8 Pixelblockbildung
Das ganze Bild wird in eine Aneinaderreihung von Blöcken unterteilt, die jeweils aus 8x8 Pixel aufgebaut sind.
4. DCT (Discrete Cosinustransformation)
Redundanzen in den Bildsignalen werden durch DCT reduziert.
5. Quantisierung (Datenreduktion)
Zwar liegen die Daten in diesem Schritt schon digital vor, jedoch muss die Größe (die Anzahl der Bitzahlen) verringert werden. Durch das Runden der einzelnen Werte ermöglicht die Quantisierung, dass sich die Anzahl der verwendeten Bits verringern lässt.
6. Lauflängenkodierung
Aufeinanderfolgende Bereiche die die gleichen Farben haben werden nur einmal mit ihrer Häufigkeit angegeben.
7. Huffmankodierung
In diesem Schritt werden Farben die häufig vorkommen einem kurzen (bitarmen) Code zugeordnet. Selten auftretende Farben werden einem vergleichsweise längeren Erkennungs-Code zugeordnet.
>weiter zur Rückprojektion