Как передать Texture2D в Android и сохранить его как растровое изображение? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть сцена единства, где я хочу передать Texture2D в Android, выполнить некоторую обработку, а затем сохранить ее как растровое изображение.Мой код не работает.Для простоты я удалил часть обработки, и я пытаюсь просто сохранить изображение как растровое изображение.

На стороне единства есть некоторая инициализация для пакета Android и этой строки:

_pluginInterface.CallStatic("ProcessImage", testTexture.GetNativeTexturePtr().ToInt32(), testTexture.width, testTexture.height);

На стороне Java:

public static void ProcessImage(int ptr, int width, int height){
    Bitmap b = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);  // this is just so I get the right length  
    int byteCount = b.getByteCount();
    ByteBuffer inputBuffer = ByteBuffer.allocate(byteCount);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, ptr);
    GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, inputBuffer);
    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    inputBuffer.rewind();
    bmp.copyPixelsFromBuffer(inputBuffer);
    SaveToFileDebug(bmp); // basic function that saves the bitmap
}

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

Заранее спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

Вместо того, чтобы делать такое акробатическое кодирование, просто используйте GetRawTextureData и используйте возвращенный байтовый массив для создания своего растрового изображения

Пример

byte[] raw = testTexture.GetRawTextureData();
_plugin.Interface.CallStatic("YourMethod",raw,width, height);

Java Side

Bitmap bmp = BitmapFactory.decodeByteArray(raw, 0, raw.length)
...