我有一个byte []我是使用OpenKinect从Kinect捕获的,它是Java JNA包装器。我想知道是否有任何现有的库我可以用来将RGB数据的byte []转换成我可以显示/存储的图像?
答案 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。
免责声明:代码示例尚未经过测试。