2013-06-25 3 views
3

У меня есть int [2048] [2048] массив необработанных данных изображения tiff в java. Я хочу преобразовать этот массив обратно в BufferedImage. Как мне продолжить?Как преобразовать массив необработанных данных в BufferedImage

+0

Это сырые данные или TIFF сейчас? Измените двусмысленный вопрос, чтобы получить хорошие ответы. – Durandal

+0

это необработанные данные. – Marcio

ответ

2

Когда вы говорите сырые данные это ничего не говорит о формате данных, я предполагаю, что это будет в самом общем виде, не сказать: ARGB , Превращение его в BufferedImage может быть сделано путем простого переноса каждого пикселя с помощью метода BufferedImage.setRGB():

public static BufferedImage toBufferedImage(int[][] rawRGB) { 
    int h = rawRGB.length; 
    int w = rawRGB[0].length; 
    BufferedImage i = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 
    for (int y=0; y<h; ++y) { 
     for (int x=0; x<w; ++x) { 
      int argb = rawRGB[y][x]; 
      i.setRGB(x, y, argb); 
     } 
    } 
    return i; 
} 

Вы получаете идею, просто скопировать пиксель за пикселем в BufferedImage.

Если изображение похоже на зеркало в одном или обоих измерениях, вам необходимо исправить это в вызове setRGB с помощью (w-x-1, h-y-1) соответственно. Если изображение, похоже, повернуто, создайте изображение с измененными w и h и установитеRGB (y, x, argb). Если цвета отображаются инвертированными/искаженными, узнайте порядок каналов в значении argb и соответствующим образом измените его, чтобы сделать порядок каналов A, R, G, B. Пиксели также могут быть в совершенно другой цветовой модели - вам нужно узнать, в какой цветовой модели они находятся, и преобразовать каждый пиксель в ARGB.

Способ, которым вы получили массив от , должен содержать документацию о том, как организованы данные.

3

Как просто:

BufferedImage image = ImageIO.read(new ByteArrayInputStream(array)); 
+0

ByteArrayInputStream принимает массив байтов в качестве аргумента, но у меня есть массив int [] [] – Marcio