将RGBA的ByteBuffer转换为java中的图像

时间:2014-10-29 04:16:59

标签: java image scala png rgba

我有一个包含RGBA数据的ByteBuffer,我想将其转换为BufferedImage,以便将其作为PNG写入文件。它看起来不像BufferedImage的构造函数支持RGBA所以我将我的缓冲区转换为ABGR,但颜色看起来非常有趣。这是我在Scala中编写的代码片段。你能告诉我一些我做错的事吗?说实话,我不确定图像数据是否在RGBA色彩空间中。我在使用glDrawPixels方法调用渲染它之前拦截了它,并使用表示GL_RGBA的枚举传递给该方法。

byteBuffer.rewind()
val buffer = new Array[Byte](byteBuffer.capacity)
var n = 0
while (n < byteBuffer.capacity) {
  buffer(n) = byteBuffer.get(n + 3)
  buffer(n + 1) = byteBuffer.get(n)
  buffer(n + 2) = byteBuffer.get(n + 1)
  buffer(n + 3) = byteBuffer.get(n + 2)
  n += 4
}
byteBuffer.rewind()
val img = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR)
img.getRaster.setDataElements(0, 0, width, height, buffer)
ImageIO.write(img, "PNG", writer) 

0 个答案:

没有答案