Jor*_*vol 9 camera android opengl-es
我正试图在android中为相机添加一些效果,我在互联网上发现了一些东西,但是在创建纹理时我遇到了困难,
我使用函数decodeYUV420SP()返回一个int [width*height] RGB数组,其中十六进制值进入每个数组位置,
现在,我想创建一个这个数组的openGL纹理,但我不知道如何,我可以将每个十六进制值转换为它的R_G_B分离并将其放入opengl但它不起作用我做这样的事情:
mNewTexture = new int[width*height*4]
for(int i=0; i<mRGB.length; i=i+4){
mNewTexture[i] = getR(mRGB[i]) ; //R
mNewTexture[i+1] = getG(mRGB[i]) ; //G
mNewTexture[i+2] = getB(mRGB[i]) ; //B
mNewTexture[i+3] = getA(mRGB[i]); //A
}
Run Code Online (Sandbox Code Playgroud)
将十六进制值转换为RGBA(从0到255)
我这样做是为了将其转换为openGL纹理:
gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_FLOAT, FloatBuffer.wrap(mNewTexture));
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)
然而有些事情是因为它不起作用......
任何的想法?
为什么你尝试将 int 数组包装为 FloatBuffer?大多数转换都是不必要的。
只需获取原始纹理,将其包装在字节缓冲区中,然后将其传递给类型为 GL_UNSIGNED_BYTE 的 glTexImage 即可。无需从已有的数组中创建新数组。
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ByteBuffer.wrap(mRGB));
| 归档时间: |
|
| 查看次数: |
1238 次 |
| 最近记录: |