У меня есть байт [] Я захватил Kinect с помощью OpenKinect и это Java JNA-обертка. Мне интересно, есть ли какая-либо существующая библиотека, которую я могу использовать для преобразования байта [] данных RGB в изображение, которое я могу отображать/хранить?Преобразование байт [] данных RGB в изображение
ответ
Java BufferedImage
является отличным кандидатом.
Я бы узнать цветовую схему кодирования вашего byte[]
и превратить его в int[]
приемлемый для установки массива RGB в виде BufferedImage
с setRGB()javadoc. Затем вы можете сохранить изображение на диск в различных форматах или отобразить для отображения.
Вы можете конвертировать RGB данные byte[]
в int[]
, где каждый ИНТ кодирует ARGB пиксель (альфа, красный, зеленый, синий). Затем используйте следующий код для создания BufferedImage
int[] pixels = new int[width * height];
// do the conversion byte[] => int[]
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
img.setRGB(0, 0, width, height, pixels, 0, width);
Вы можете использовать ImageIO, чтобы сохранить изображение:
File outputFile = new File("image.png");
ImageIO.write(img, "png", outputFile);
Или нарисовать изображение, например, в методе Нарисовать JComponent в:
public void paint(Graphics graphics){
Graphics2D g = (Graphics2D)graphics;
g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null);
}
Подробнее см. В соответствующем JavaDoc. BufferedImage.TYPE_INT_ARGB
- это, как правило, самая быстрая кодировка изображений (по крайней мере, это было недавно в Mac OS X и Windows), даже если вы вообще не используете альфа.
Отказ от ответственности: Примеры кода не были протестированы.
Возможный дубликат - http://stackoverflow.com/questions/1143293/how-to-convert-array-of-bytes-into-image-in-java-se – mre