#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. Конечно, для каждого растрового изображения таким образом потребуется больше памяти, но вот несколько моментов, которые следует запомнить:
- Текстуры OpenGL сохраняются в встроенной памяти, которая не имеет таких ограничений, как обычная память, выделяемая для приложений.
- После того, как вы создали свою текстуру, вам больше не нужно удерживать растровое изображение. Вызовите recycle для растрового изображения сразу после загрузки текстуры, и все должно быть в порядке.
Ответ №2:
Каков размер вашего изображения. Это степень двойки? Если нет, измените размер с помощью редактора изображений и повторите попытку.
Комментарии:
1. Размер изображения равен 512X512. Как я уже сказал, я удаляю параметры. inPreferredConfig=Bitmap.Config.RGB_565; ошибка не возникнет. В противном случае возникает ошибка
2. В моем случае эта проблема была вызвана растровым изображением размером 1 x 64. По-видимому, 1 не считается степенью 2 на Samsung Galaxy Y.