2010-11-21 37 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(); 

JEPG görüntüsünü bayt dizisi olarak almak için yukarıdaki kodu kullanıyorum. Bu bayt dizisinde tam olarak ne olduğunu bilmek istiyorum. Bu dizi herhangi bir dosya başlığı bilgisi veya sadece piksel değerleri içeriyor mu? Ve örneğin, bu görüntünün rengini tersine çevirmek istersem, bunu yapmanın iyi bir yolu nedir? Çok teşekkürler!Hakkında java ByteArrayOutputStream sınıfı

cevap

0

ByteArrayOutputStream, ona yazdıklarınızı içerir. Ne fazla ne eksik. Yani sorunuz ImageIO.write() hakkında gerçekten. Hangi görüntüyü kodlama türüne göre bir kodlama yazıyor. Hangi JPEG idi.

3

Bellekte tam bir JPEG dosyası var.

DÜZENLEME: Eğer bir dizi olarak piksel verileri işlemek için isterseniz, Raster daha yararlı olabilir:

Örn .:

Raster raster = bufferedImage.getData(); 

Ardından Raster.getPixels yöntemlerinden birini çağırabilir.

+0

Peki, gerçek piksel değerini nasıl alabilirim ??? –

1

Gerçek piksel değerlerini aşağıda okuyabilirsiniz. JPEG bilgileri ile bir şey yapmak çok daha zordur!

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")); 
} 
İlgili konular