Преобразование байтового массива в изображение с буферизацией приводит к нулю - PullRequest
2 голосов
/ 31 октября 2011

Я пытаюсь преобразовать байтовый массив длиной 128 в растровое изображение 32x32, хранящееся в BufferedImage. Я использую следующий код:

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 устанавливается в ноль. Я не понимаю, почему это происходит. Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 31 октября 2011

Из JavaDoc :

Возвращает BufferedImage в результате декодирования предоставленного InputStream с ImageReader, выбранным автоматически из числа зарегистрированных на данный момент. InputStream оборачивается в ImageInputStream. Если ни один зарегистрированный ImageReader не утверждает, что может прочитать результирующий поток, возвращается null .

Похоже, что содержимое байтового массива не может быть декодировано как известный формат изображения.

0 голосов
/ 16 декабря 2012

Может быть и другая причина получения нулевого значения, если вы изменили aBitData таким образом, чтобы не представлять никакого изображения, предположим - если вы измените первый байт, который является байтом заголовка изображения, а не данными изображения.

0 голосов
/ 31 октября 2011

Я подозреваю, что данные, представленные в вашем битовом массиве, не соответствуют ни одному из поддерживаемых форматов файлов, т.е. могут быть прочитаны любым из реализованных ImageReader s.

...