2011-08-19 65 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());