【问题标题】:How to create bitmap from integer array in C / OpenGL如何在 C / OpenGL 中从整数数组创建位图
【发布时间】:2009-11-29 21:26:24
【问题描述】:

我正在尝试将我的代码从 Java 移动到 C,但在尝试在 C 中查找一个可以获取整数数组并从中为 OpenGL 创建位图的函数时遇到了问题。在 Java 中,我使用了

bitmap = Bitmap.createBitmap( {int array name} , w, h, Config.RGB_565);

是否有我可以在 C 中使用的类似函数,或者我可以使用的解决方法?

另外,如果重要的话,我正在为 Android 编程。

谢谢!

【问题讨论】:

    标签: java c android opengl-es


    【解决方案1】:

    我对 android 不是特别熟悉,但如果我记得 OpenGL C 绑定正确,则没有位图结构。相反,各种位图函数(即glBindTexture())只采用 GLuint 指针(相当于 C 的数组)。

    在 Java 中,一切都是一个类,因此位图有一个与之关联的类,但位图类大多只是实际包含图像的 int 数组的包装器(和一些函数)。

    特别是在 OpenGL 中,我们经常将数组与 glBindTexture 函数绑定,然后其他纹理函数使用它绑定的名称来引用 OpenGL 的正确“状态”。

    另一方面,如果你想缩短这个过程,你可以随时使用glTexImage2D

    【讨论】:

      【解决方案2】:

      我不久前浏览了 BMP 格式的文档来撰写this Python implementation。你应该可以毫不费力地将它移植到 C 中。

      【讨论】:

        【解决方案3】:

        您要查找的函数就是@987654321@。它将数组中的数据上传到 OpenGL。您指定您拥有和想要的源格式和目标格式,其余的由它来完成。

        @987654322@ 一起使用可创建存储的可重复使用的纹理对象,因此您无需在每帧使用之前上传纹理数据。

        【讨论】:

          【解决方案4】:

          这是你需要的:

          glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , x_size, y_size, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)your_data );
          

          x_size 和 y_size 必须是 2 的幂。对于此代码,您需要 x_sizey_size 4 字节整数(或 x_sizey_size*4 字节)数组。对于测试,只需尝试:

          unsigned char data[32*32*4];
          
          for( int i=0; i< sizeof(data); ++i) data[i]=rand();
          // Don't forget to #include <stdlib.h>
          
          glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , 32, 32, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)data );
          

          其他可能的格式:GL_BGRA(用于不同的字节顺序)、GL_RGB(如果您没有 alpha)。使用 glGenTextures / glBindTexture 记住纹理设置以供以后使用。

          【讨论】:

          • 有没有我可以用整数而不是字节来做到这一点?
          猜你喜欢
          • 2021-10-06
          • 1970-01-01
          • 2014-08-26
          • 2016-07-17
          • 2020-12-31
          • 2014-02-28
          • 1970-01-01
          相关资源
          最近更新 更多