По разным причинам я реализую класс, который можно использовать аналогично растровому изображению в Android, сохраняя пиксельные данные для случаев, когда необходимо изменить размер действительного растрового изображения перед его передачей в OpenGL (степень размера 2)
Я использую int [] для хранения данных пикселей, поэтому мой код выглядит так:
width2 = nearestPowerOf2(width);
height2 = nearestPowerOf2(height);
int[] pixels = new int[width2 * height2];
bitmap.getPixels(pixels, 0, width2, 0, 0, bitmap.getWidth(), bitmap.getHeight());
Теперь, сделав шаг назад на мгновение, если я создам холст и использую canvas.draw (), чтобы поместить меньшее растровое изображение на большее изображение правильного размера и связать его в OpenGL, он прекрасно отрисовывается.
Если, однако, я беру свои данные пикселей (обернутые в IntBuffer) и связываю их, значения альфа неверны. Для полноты, вот как я связываю:
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width2, height2, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, pixelsBuffer);
Я не понимаю, почему это должно происходить.
Я проверил формат растровых изображений, и все они ARGB_8888. И, опять же, если я рисую растровое изображение напрямую или использую Bitmap.createBitmap (), это работает, но использование getPixels - нет?
(Причина, по которой я не могу использовать Bitmap & Canvas, как обычно можно было бы использовать, заключается в том, что, если я это сделаю, у нас кончаются нативные на некоторых устройствах, которые, по-видимому, очень ленивы в отношении освобождения нативной памяти. Да, я использовал Bitmap.recycle (), я устанавливал для растрового изображения значение null и проверял, чтобы холст также был установлен в значение null. Проблема возникла только на нескольких устройствах, но достаточно, чтобы мне нужно было обойтись.)