Как передавать большие сгенерированные растровые изображения между действиями? - PullRequest
0 голосов
/ 07 августа 2020

Я получаю кадры камеры, выполняю некоторую обработку с помощью OpenCV и генерирую несколько растровых изображений. Я хочу передать их другому занятию. Эти изображения не очень маленькие. Фактически, если я попытаюсь передать их все, используя intent.putExtra как parcelable s, я получу

TransactionTooLargeException

Если вы спросите, эти изображения не являются ресурсами. Они являются чисто сгенерированными изображениями и находятся в памяти. Значит, нет URI для их поиска.

Как лучше всего решить эту проблему?

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Сначала вам нужно преобразовать его в byteArray

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent i = new Intent(this, Activity.class);
i.putExtra("bitmap", byteArray);
startActivity(i);

И получить его как:

Bitmap bitmap;
//...

byte[] byteArray = getIntent().getByteArrayExtra("bitmap");
bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

Вы также можете прочитать документацию здесь

0 голосов
/ 07 августа 2020

Я предлагаю вам сохранить эти изображения во внутренней памяти, используя openFileOutput, и передать сохраненные имена файлов следующему действию, где они будут извлечены через openFileInput.

Потому что, как упоминалось в @esQmo_, пакеты очень ограничены размером памяти и не предназначены для передачи большого количества данных.

...