我正在开发一个视频游戏,我正在手机上测试它。最近,我决定在另一台设备上测试它,在这个新设备中,我遇到了一些特定纹理的问题,而其余设备都很好。我不知道会发生什么,我已经尝试了很多东西,似乎什么都没有用。 如果我改变其他类似的bmp图片,它会很好地加载,但是当我移回原版时它根本不会加载。
我使用的加载纹理的代码如下:(虽然我认为这很常见,但不应该崩溃......)
InputStream is = context.getResources().openRawResource(R.drawable.skybox_frente);
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
is = null;
} catch (IOException e) {
}
}
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
if(gl instanceof GL11) {
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_NEAREST);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, GL11.GL_TRUE);
} else {
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
}
gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
确切的错误是BitmapFactory.decodeStream返回null,即使InputStream为非null。
编辑:事实上,错误是在获取InputStream时,context.getResources().openRawResource(R.drawable.skybox_frente)
正在返回一个只有特定图片的空流...
这是我无法加载的图片之一:
http://www.mediafire.com/?1if0iazmc89file
谢谢大家的时间!
答案 0 :(得分:0)
尝试将图像数据加载到字节数组中,并使用BitmapFactory类的decodeByteArray。
将图像数据加载到字节数组中 -
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(bis.count);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte)current);
}
byte[] imageData = baf.toByteArray();
然后使用“imageData”使用BitmapFactory的decodeByteArray。
BitmapFactory.decodeByteArray(imageData, 0, imageData.length)
如果这对你有用,请告诉我。