有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用alpha组件将像素数据从Java发送到OpenGL的最有效方法

我正在寻找最有效的(CPU,而不是内存)方式,将BuffereImage中包含的4分量像素数据打包成OpenGL可以使用的格式

据我所知,在Java端,有TYPE_4BYTE_ABGRTYPE_INT_ARGB,在GL端有GL_RGBAGL_BGRA。请注意,这意味着重新映射alpha组件。目前,要从Java转到GL,我会执行以下操作:

int w = image.getWidth(), h = image.getHeight();
for (int i=0;i<w;i++)
    for (int j=0;j<h;j++)
{
    int col = image.getRGB(i, j);
    data.put(4*(j*w+i), (byte)((col >> 16) & 0xff));
    data.put(4*(j*w+i)+1, (byte)((col >> 8) & 0xff));
    data.put(4*(j*w+i)+2, (byte)((col >> 0) & 0xff));
    data.put(4*(j*w+i)+3, (byte)((col >> 24) & 0xff));
}

其中数据是一个字节缓冲,然后将以GL_RGBA格式发送到glTexture方法之一

我并不是真的在寻找对上述代码的细微调整(除非您认为它们会产生重大影响),而是一种避免完全重新映射的方法。或者至少避免getRGB中的颜色转换。例如,在Java中处理TYPE_3BYTE_BGR时,我可以将其直接发送到GL_BGR并用以下内容填充缓冲区:

data.put(((DataBufferByte)image.getData().getDataBuffer()).getData());

共 (0) 个答案