2012-02-15 5 views
1

У меня есть байт [] Я захватил Kinect с помощью OpenKinect и это Java JNA-обертка. Мне интересно, есть ли какая-либо существующая библиотека, которую я могу использовать для преобразования байта [] данных RGB в изображение, которое я могу отображать/хранить?Преобразование байт [] данных RGB в изображение

+2

Возможный дубликат - http://stackoverflow.com/questions/1143293/how-to-convert-array-of-bytes-into-image-in-java-se – mre

ответ

2

Java BufferedImage является отличным кандидатом.

Я бы узнать цветовую схему кодирования вашего byte[] и превратить его в int[] приемлемый для установки массива RGB в виде BufferedImage с setRGB()javadoc. Затем вы можете сохранить изображение на диск в различных форматах или отобразить для отображения.

1

Вы можете конвертировать 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), даже если вы вообще не используете альфа.

Отказ от ответственности: Примеры кода не были протестированы.