6

我有一个byte[]要转换为图像并在标签中显示图像的图像。byte[] 是 jpeg 2000 格式。我已经尝试了下面的代码,但它返回 null:

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

图像值返回为null

我希望能够在如下标签中显示图像:

jLabel.setIcon(new ImageIcon(image));

谢谢

4

2 回答 2

12

要将字节数组转换byte[]Image,请使用getImage(). 可能最简单的方法是ImageIcon使用ImageIcon(byte[])构造函数实例化一个,然后调用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();
}

我认为这可以用于pnggifbmpjpg图像。此外,字节数组也不必像本例中那样进行硬编码。

如果你想要一个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());

于 2012-10-01T01:18:12.343 回答
0
ServletOutputStream out = response.getOutputStream();
out.write(user.getBytes());

以上是它在过去对我的工作方式,用户将个人资料图片简单地存储在字节数组中。servlet 实现了这一点并输出图像。

于 2011-08-19T09:30:41.713 回答