将字节数组转换为bufferedimage会导致null

时间:2011-10-31 10:14:55

标签: java arrays byte bufferedimage image-conversion

我正在尝试将长度为128的字节数组转换为存储在BufferedImage中的32x32位图。 我使用以下代码:

private BufferedImage fSP;

public Pattern( byte[] aBitData ) {
  if ( aBitData == null ) {
    throw new IllegalArgumentException( "Please provide a non-null byte array of length 128: " + aBitData );
  }
  else if ( aBitData.length != 128 ) {
    throw new IllegalArgumentException( "Please provide a non-null byte array of length 128: " + aBitData.length );
  }
  InputStream in = new ByteArrayInputStream( aBitData );
  try {
    fSP = ImageIO.read( in );
  } catch( IOException e ) {
    e.printStackTrace();
  }
}

但每次fSP因某种原因设置为null。我不明白为什么会这样。谁能帮助我?

3 个答案:

答案 0 :(得分:1)

来自JavaDoc

返回一个BufferedImage,作为解码提供的InputStream的结果,其中ImageReader是从当前注册的ImageReader中自动选择的。 InputStream包装在ImageInputStream中。如果没有已注册的ImageReader声称能够读取结果流,则返回 null

看起来好像字节数组的内容无法解码为已知的图像格式。

答案 1 :(得分:0)

我怀疑您的位数组中提供的数据与任何支持的文件格式都不对应,即任何已实现的ImageReader都可以读取。

答案 2 :(得分:0)

如果你修改了一个不代表任何图像的方式,可能会有另一个获得null的原因,假设 - 如果你修改了第一个字节,即图像头字节,而不是图像数据。