Java图像作为OpenGL纹理映射的ByteBuffer

时间:2011-11-17 14:09:36

标签: java eclipse opengl image-processing bytebuffer

我正在使用openGL并试图了解纹理映射。

目前,我有以下内容添加我将使用的图像:

GL11.glBindTexture(GL11.GL_TEXTURE_2D, 1);
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);

GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
GL11.glTexParameteri (GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
GL11.glTexParameteri (GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri (GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);

GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE);

GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, 32, 32, 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, "imageData");

我有字符串"imageData"我的图像需要一个ByteBuffer。我怎么得到这个?该图像位于Eclipse中的src文件夹中。

1 个答案:

答案 0 :(得分:0)

这是未经测试但看起来会起作用

ByteBuffer buffer = ByteBuffer.wrap(getBytesFromFile(filename));

http://www.exampledepot.com/egs/java.io/File2ByteArray.html

处有一个getBytesFromFile实现 编辑:好的,这个例子现在真的没了,所以这里是一个读取ByteBuffer的实现

private static ByteBuffer readToBuffer(String filename) throws IOException
{
    File file = new File(filename);
    ByteBuffer bb = ByteBuffer.allocate((int) file.length());
    FileInputStream fis = new FileInputStream(filename);

    int bytesRead = 0;
    byte[] buf = new byte[BYTES_PER_READ];

    while (bytesRead != -1)
    {
        bb.put(buf, 0, bytesRead);
        bytesRead = fis.read(buf);
    }

    fis.close();

    return bb;
}