2011-08-19 70 views
4

我有一個byte[],我要轉換爲一個圖像,並在標籤顯示圖像。 字節[]是JPEG格式的2000。 我曾嘗試下面的代碼,但它爲空返回:轉換字節數組(byte [])到圖像在Java中

InputStream in = new ByteArrayInputStream(bytearray); 
BufferedImage image = ImageIO.read(in); 

圖像值回來爲null

我希望能夠在一個標籤來顯示圖像象下面這樣:

jLabel.setIcon(new ImageIcon(image)); 

感謝

+1

http://stackoverflow.com/questions/2662916/read-jpeg2000-files-in-java –

+1

我的猜測可能的複製是輸入數據不正確。請說明你是如何獲得這些數據的。 –

+0

看一看這裏:http://stackoverflow.com/questions/1212882/convert-byte-array-to-image-in-java-without-knowing-the-type – Kris

回答

0
ServletOutputStream out = response.getOutputStream(); 
out.write(user.getBytes()); 

上面怎麼它在過去的工作中,我在那裏用戶都有一個配置文件圖片只是存儲在一個字節數組中。 servlet實現這一點並輸出圖像。

+0

@喬恩飛碟雙向,我得到的byte []來自網絡服務。我將用戶ID和指紋發送到存儲圖像的Web服務,所以如果它們正確,我會返回字節[]。 – user898755

+0

當然,但它通常是瀏覽器,而不是Java的,輪流的'的byte []'回的圖像,所以我不能看到你的答案爲是相關的。 –

+0

@user請將您的意見從此答案移至問題。這樣喬恩會被告知它(AFAIU)。 –

9

要字節數組,即byte[]轉換成Image,使用getImage()。也許這樣做最簡單的方法是使用ImageIcon(byte[])構造函數實例化一個ImageIcon,然後調用getImage()。這在下面的方法中,特別是在最後一行所示:

public Image createImage(){ 
    //ccurve.png 
    byte[] b = {-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 
     0, 0, 0, 15, 0, 0, 0, 15, 8, 6, 0, 0, 0, 59, -42, -107, 
     74, 0, 0, 0, 64, 73, 68, 65, 84, 120, -38, 99, 96, -64, 14, -2, 
     99, -63, 68, 1, 100, -59, -1, -79, -120, 17, -44, -8, 31, -121, 28, 81, 
     26, -1, -29, 113, 13, 78, -51, 100, -125, -1, -108, 24, 64, 86, -24, -30, 
     11, 101, -6, -37, 76, -106, -97, 25, 104, 17, 96, -76, 77, 97, 20, -89, 
     109, -110, 114, 21, 0, -82, -127, 56, -56, 56, 76, -17, -42, 0, 0, 0, 
     0, 73, 69, 78, 68, -82, 66, 96, -126}; 
    return new ImageIcon(b).getImage(); 
} 

我認爲這可以通過用於pnggifbmp,和jpg圖像。此外,字節數組不必爲硬編碼,如本例所示。

如果你想要一個ImageIcon而不是Image,不叫getImage()

public ImageIcon createImageIcon(){ 
    //ccurve.png 
    byte[] b = {-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 
     0, 0, 0, 15, 0, 0, 0, 15, 8, 6, 0, 0, 0, 59, -42, -107, 
     74, 0, 0, 0, 64, 73, 68, 65, 84, 120, -38, 99, 96, -64, 14, -2, 
     99, -63, 68, 1, 100, -59, -1, -79, -120, 17, -44, -8, 31, -121, 28, 81, 
     26, -1, -29, 113, 13, 78, -51, 100, -125, -1, -108, 24, 64, 86, -24, -30, 
     11, 101, -6, -37, 76, -106, -97, 25, 104, 17, 96, -76, 77, 97, 20, -89, 
     109, -110, 114, 21, 0, -82, -127, 56, -56, 56, 76, -17, -42, 0, 0, 0, 
     0, 73, 69, 78, 68, -82, 66, 96, -126}; 
    return new ImageIcon(b); 
} 

然後就可以調用jlabel.setIcon(createIconImage());