2012-06-15 2 views
3

Изображение преобразуется в оттенки серого RGB.
Далее, Grayscale-изображение преобразуется в массив, который выполняется для определения преобразования. В результате массив состоит из «0» и «255».Неправильное преобразование из массива в BufferedImage

Затем мне нужно превратить этот массив в BufferedImage.

Я использовал код:

public static BufferedImage getImageFromArray(int pixelsMain[][], int width, int height) throws IOException { 

     int pixels[] = new int[320*240]; 

     for(int i=0, numb=0; i<pixelsMain.length; i++) 
      for(int j=0; j<pixelsMain[i].length; j++){ 
       pixels[numb]=pixelsMain[i][j]; 
       numb++; 
      } 

     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); 
     WritableRaster raster = (WritableRaster) image.getData(); 
     raster.setPixels(0,0,width,height,pixels); 
     try { 
      ImageIO.write(image, "bmp", new FileOutputStream("[path]")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return image; 
    } 

Однако, после выполнения метода - все значения "255" преобразуется в "-1".

В результате изображение полностью черное.

Не могли бы вы рассказать, как решить проблему?

+0

Вы имели в виду 255? Это просто интерпретация: 255 unsigned char == -1 signed char –

+0

Это правда) исправлено) Если перевод правильный - по какой-то причине изображение записывается на диск как черный прямоугольник? – TorchTT

ответ

4

Использовать image.getRaster() вместо (WritableRaster)image.getData(). Последний делает копию, поэтому ее изменение не имеет никакого эффекта.

+0

Работы) Спасибо) – TorchTT

Смежные вопросы