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.

To view this content, you need to install Java from java.com

>weiter zur Rückprojektion