2010-11-21 9 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 이미지를 바이트 배열로 가져옵니다. 이 바이트 배열에 정확히 무엇이 있는지 알고 싶습니다. 이 배열에는 파일 헤더 정보 또는 픽셀 값만 포함되어 있습니까? 예를 들어,이 이미지의 색상을 뒤집으려면 어떻게해야할까요? 정말 고마워!java ByteArrayOutputStream 클래스 정보

답변

0

ByteArrayOutputStream에는 작성한 내용이 모두 포함됩니다. 아무것도 더, 아무것도 덜. 그래서 귀하의 질문은 Image0.write()에 대해 입니다. 여러분이 제공 한 인코딩 유형에 따라 이미지 인코딩을 작성합니다. 어느 JPEG입니다.

3

메모리에있는 완전한 JPEG 파일입니다.

편집 : 당신이 배열로 픽셀 데이터를 조작하려는 경우, 당신은 Raster 더 도움이 될 :

예컨대 :

Raster raster = bufferedImage.getData(); 

그런 다음 Raster.getPixels 방법 중 하나를 호출 할 수 있습니다.

+0

그래서 어떻게 실제 픽셀 값을 얻을 수 있습니까 ??? –

1

다음은 실제 픽셀 값을 읽는 방법입니다. JPEG 정보는 무엇이든하는 것이 훨씬 어렵습니다!

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