У меня есть int [2048] [2048] массив необработанных данных изображения tiff в java. Я хочу преобразовать этот массив обратно в BufferedImage. Как мне продолжить?Как преобразовать массив необработанных данных в BufferedImage
ответ
Когда вы говорите сырые данные это ничего не говорит о формате данных, я предполагаю, что это будет в самом общем виде, не сказать: 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.
Способ, которым вы получили массив от , должен содержать документацию о том, как организованы данные.
Как просто:
BufferedImage image = ImageIO.read(new ByteArrayInputStream(array));
ByteArrayInputStream принимает массив байтов в качестве аргумента, но у меня есть массив int [] [] – Marcio
Это сырые данные или TIFF сейчас? Измените двусмысленный вопрос, чтобы получить хорошие ответы. – Durandal
это необработанные данные. – Marcio