2010-11-21 6 views
1
BufferedImage bufferedImage = ImageIO.read(new File("/...icon.jpg")); 

// this writes the bufferedImage into a byte array called resultingBytes 
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 

ImageIO.write(bufferedImage, "jpg", byteArrayOut); 

byte[] resultingBytes = byteArrayOut.toByteArray(); 

Ich verwende den obigen Code, um ein JPEG-Bild als Byte-Array zu erhalten. Ich möchte wissen, was genau in diesem Byte-Array ist. Enthält dieses Array Dateikopfinformationen oder nur Pixelwerte? Und wenn ich zum Beispiel die Farbe dieses Bildes umkehren möchte, was ist ein guter Weg dazu? Vielen Dank!Über Java ByteArrayOutputStream Klasse

Antwort

0

Der ByteArrayOutputStream enthält, was auch immer Sie ihm geschrieben haben. Nicht mehr, nicht weniger. Ihre Frage ist wirklich über ImageIO.write(). Dies schreibt eine Kodierung eines Bildes entsprechend dem von Ihnen angegebenen Kodierungstyp aus. Was war JPEG?

3

Es ist eine vollständige JPEG-Datei im Speicher.

EDIT: Wenn Sie Pixeldaten als ein Array manipulieren möchten, können Sie Raster mehr hilfreich:

Z. B .:

Raster raster = bufferedImage.getData(); 

Sie können dann eine der Raster.getPixels Methoden aufrufen.

+0

Also, wie kann ich echte Pixel Wert bekommen ??? –

1

Hier lesen Sie die tatsächlichen Pixelwerte. Die JPEG-Informationen sind viel schwieriger zu tun!

public static void main(String... args) throws IOException { 
    String u = "http://blog.stackoverflow.com/wp-content/uploads/stackoverflow-logo-300.png"; 

    BufferedImage old = ImageIO.read(new URL(u)); 
    BufferedImage inverted = new BufferedImage(old.getWidth(), 
               old.getHeight(), 
               BufferedImage.TYPE_INT_RGB); 


    for (int y = 0; y < old.getHeight(); y++) { 
     for (int x = 0; x < old.getWidth(); x++) { 
      Color oldColor = new Color(old.getRGB(x, y)); 

      // reverse all but the alpha channel 
      Color invertedColor = new Color(255 - oldColor.getRed(), 
              255 - oldColor.getGreen(), 
              255 - oldColor.getBlue()); 

      inverted.setRGB(x, y, invertedColor.getRGB()); 
     } 
    } 

    ImageIO.write(inverted, "png", new File("test.png")); 
} 
Verwandte Themen