【发布时间】:2012-02-15 18:32:35
【问题描述】:
我有一个字节[],我使用 OpenKinect 从 Kinect 捕获,它是 Java JNA 包装器。我想知道是否有任何现有的库可以用来将 RGB 数据的 byte[] 转换为可以显示/存储的图像?
【问题讨论】:
我有一个字节[],我使用 OpenKinect 从 Kinect 捕获,它是 Java JNA 包装器。我想知道是否有任何现有的库可以用来将 RGB 数据的 byte[] 转换为可以显示/存储的图像?
【问题讨论】:
Java 的 BufferedImage 是一个很好的候选者。
我会找出您的byte[] 的颜色编码方案并将其转换为int[],以便将BufferedImage 的RGB 数组设置为setRGB()javadoc。然后,您可以将图像以多种格式保存到磁盘,或渲染以供显示。
【讨论】:
您可以将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。
免责声明:代码示例未经测试。
【讨论】: