Недопустимый формат растрового изображения в OpenGL

#android #opengl-es #bitmap #rajawali

#Android #opengl-es #растровое изображение #раджавали

Вопрос:

Я использую библиотеку Rajawali в своем приложении.

Я пытаюсь создавать изображения png с опцией

 options.inPurgeable = true;
options.inInputShareable = true;
options.inSampleSize = sampleSize;
options.inDither = false;
options.inScaled = false;
options.inPreferredConfig=Bitmap.Config.RGB_565; 
  

поскольку я думаю, что это уменьшает использование памяти.Но это вызывает ошибку при

 GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, mBitmapFormat, mBitmap, 0);
  

в классе ASingleTexture;

Но если я удалю

 options.inPreferredConfig=Bitmap.Config.RGB_565;
  

тогда ошибка не возникает, но используется много памяти.Как решить эту проблему

Комментарии:

1. какая именно ошибка происходит? можете ли вы опубликовать свою трассировку стека?

Ответ №1:

Если я не ошибаюсь, растровые изображения, которые вы используете для текстур OpenGL, должны соответствовать конфигурации ARGB_8888. Конечно, для каждого растрового изображения таким образом потребуется больше памяти, но вот несколько моментов, которые следует запомнить:

  1. Текстуры OpenGL сохраняются в встроенной памяти, которая не имеет таких ограничений, как обычная память, выделяемая для приложений.
  2. После того, как вы создали свою текстуру, вам больше не нужно удерживать растровое изображение. Вызовите recycle для растрового изображения сразу после загрузки текстуры, и все должно быть в порядке.

Ответ №2:

Каков размер вашего изображения. Это степень двойки? Если нет, измените размер с помощью редактора изображений и повторите попытку.

Комментарии:

1. Размер изображения равен 512X512. Как я уже сказал, я удаляю параметры. inPreferredConfig=Bitmap.Config.RGB_565; ошибка не возникнет. В противном случае возникает ошибка

2. В моем случае эта проблема была вызвана растровым изображением размером 1 x 64. По-видимому, 1 не считается степенью 2 на Samsung Galaxy Y.