Ошибка при загрузке определенных растровых изображений для текстур в OpenGL ES для Android - PullRequest
0 голосов
/ 29 ноября 2011

Я занимаюсь разработкой видеоигры и тестирую ее на своем телефоне. Недавно я решил протестировать его на другом устройстве, и в этом новом устройстве у меня возникли проблемы с некоторыми конкретными текстурами, в то время как с остальными все идет нормально. Я понятия не имею, что может происходить, я много чего перепробовал и, похоже, ничего не работает. Если я изменяю картинку 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 возвращает ноль, даже если InputStream НЕ равен нулю.

РЕДАКТИРОВАТЬ: На самом деле ошибка была при получении InputStream, context.getResources().openRawResource(R.drawable.skybox_frente) возвращает пустой поток только с конкретными изображениями ...

Вот одна из картинок, которую я не могу загрузить:

http://www.mediafire.com/?1if0iazmc89file

Спасибо всем за потраченное время!

1 Ответ

0 голосов
/ 30 ноября 2011

Попробуйте загрузить данные изображения в байтовый массив и используйте decodeByteArray класса BitmapFactory.

Загрузка данных изображения в байтовый массив -

         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();

Затем используйте decodeByteArray BitmapFactory, используя"imageData".

         BitmapFactory.decodeByteArray(imageData, 0, imageData.length)

Пожалуйста, дайте мне знать, сработало ли это для вас или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...