我想以二进制格式(无符号字节)从磁盘读取单色图像数据,并将其显示为 Android 中的 OpenGL ES 2 纹理。我目前正在使用 Eclipse 和 AVD 模拟器。
我可以使用 InputStream 从磁盘读取数据,然后将字节数据转换为 int 以允许我使用 createBitmap 方法。
我希望通过使用 ALPHA_8 作为位图格式来创建单色位图,但如果我这样做,纹理在渲染时会显示为纯黑色。如果我将位图格式更改为 RGB_565,我可以看到图像的某些部分,但当然颜色都是乱码,因为它是错误的数据格式。
我尝试向 texImage2D() 添加额外参数以尝试强制纹理格式和源数据类型,但如果我在 texImage2D 参数中使用任何 opengl 纹理格式代码,Eclipse 会显示错误。
我不知所措,谁能告诉我如何编辑它以将单色纹理导入 OpenGL ES?
int w = 640;
int h = 512;
int nP = w * h; //no. of pixels
//load the binary data
byte[] byteArray = new byte[nP];
try {
InputStream fis = mContext.getResources()
.openRawResource(R.raw.testimage); //testimage is a binary file of U8 image data
fis.read(byteArray);
fis.close();
} catch(IOException e) {
// Ignore.
}
System.out.println(byteArray[1]);
//convert byte to int to work with createBitmap (is there a better way to do this?)
int[] intArray = new int[nP];
for (int i=0; i < nP; i++)
{
intArray[i] = byteArray[i];
}
//create bitmap from intArray and send to texture
Bitmap img = Bitmap.createBitmap(intArray, w, h, Bitmap.Config.ALPHA_8);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, img, 0);
img.recycle();
//as the code is the image is black, if I change ALPHA_8 to RGB_565 then I see a corrupted image
谢谢你的帮助,
卢克