Я рисую текстуру в opengl, а затем сохраняю текстуру в файл.
Когда я рисую текстуру на экране, все в порядке, но когда я сохраняю ее, она идет не так.
Вот код:
public Bitmap toBitmap() {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(width * height * 4);
GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(byteBuffer);
return bitmap;
}
public void savePngToSd(Bitmap bmp, String fileName) {
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(fileName));
bmp.compress(Bitmap.CompressFormat.PNG, 100, bos);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Когда я рисую изображение с фоном, оно прекрасно его сохраняет, проблема появляется только при отсутствии фона.
Сохраняется с зеленым фоном :
Сохранено без фона:
Вы можете видеть, что некоторые пиксели, которые были только наполовину видимыми, стали черными. Как правильно сохранить изображение, даже без фона?
ОБНОВЛЕНИЕ:
Я обнаружил, что могу использовать растровое изображение, чтобы получить из него ByteBuffer
, а затем использовать его для создания текстуры opengl это работает, поэтому проблема должна быть связана со сжатием растрового изображения.
Я нашел статью, которая может объяснить эту проблему https://pspdfkit.com/blog/2016/a-curious-case-of-android-alpha/