将RGB数据的byte []转换为图像

时间:2012-02-15 18:32:36

标签: java image kinect

我有一个byte []我是使用OpenKinect从Kinect捕获的,它是Java JNA包装器。我想知道是否有任何现有的库我可以用来将RGB数据的byte []转换成我可以显示/存储的图像?

2 个答案:

答案 0 :(得分:3)

Java的BufferedImage是一个很棒的候选人

我会找出byte[]的颜色编码方案,并将其转换为可接受的int[],以便将BufferedImage的RGB数组设置为setRGB()javadoc。然后,您可以将图像以各种格式保存到磁盘,或渲染显示。

答案 1 :(得分:1)

您可以将byte[] RGB数据转换为int[],其中每个int编码ARGB像素(alpha,红色,绿色,蓝色)。然后使用以下代码创建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的paint方法中绘制图像:

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上),即使你根本不使用任何alpha。

免责声明:代码示例尚未经过测试。