Отправка растрового изображения из одного занятия в другое - PullRequest
0 голосов
/ 09 июля 2019

У меня был бы вопрос, чтобы задать вам проблему, связанную с переходом растрового изображения из действия, вторичного по отношению к основному действию.В дополнительном упражнении у меня есть videoView, я установил кнопку, которая при нажатии извлекает кадр из videoView.Код, который я использовал для извлечения кадра в растровом формате, выглядит следующим образом:

 videoField.setDrawingCacheEnabled(true);
            videoField.buildDrawingCache();
            Bitmap bm = videoField.getDrawingCache();
            System.out.println(bm);
            Intent intent = new Intent(this, MainActivity.class);
            intent.putExtra("BitmapImage", bm);
            startActivity(intent);

После этого в onCreate () основной операции получите растровое изображение следующим образом:

Intent intent = getIntent();
    Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");

Проблема в том, что когда я получаю растровое изображение, переменная всегда равна нулю, и я не могу установить ее в imageView.Я не могу понять причину, потому что, если я печатаю значение растрового изображения во вторичном классе, оно присутствует.Кто-нибудь может мне помочь.

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

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Существует 2 способа отправки Bitmap из одного действия в другое.

ByteArray.

Создайте byteArray для растрового изображения и отправьте его через Intent.

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

Intent anotherIntent = new Intent(this, anotherActivity.class);
anotherIntent.putExtra("image", byteArray);
startActivity(anotherIntent);

В других ваших действиях,

Bitmap bmp;

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

Примечание. Этот метод не идеален, поскольку существует ограничение в 1 МБ данных, которые вы можете передать в Intent.Поэтому, если объем данных превышает 1 МБ, произойдет сбой.

Существует более безопасный способ.

Uri / File

1 Сохраните растровое изображение как изображение в кэш-памяти вашего приложения.каталог.Это даст вам Uri файла.Передайте этот Uri через Intent.

val file = File(context.filesDir, name)
context.openFileOutput(file.name, Context.MODE_PRIVATE).use {
    it.write(bStream.toByteArray())
}

Теперь вы можете передать name через Intent.

2 В своем следующем упражнении получите Uri из Intent и загрузите Bitmap.

val file = File(context.filesDir, name)
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(file, options);

Это более безопасный способ передачи растрового изображения из одного действия в другое.

0 голосов
/ 09 июля 2019

Решение 1 Преобразовать его в массив байтов и передать с намерением

Решение 2 Сохранить растровое изображение в памяти, затем передать путь к файлу в намерении и получить доступ к этомуфайл в следующем упражнении

Лучшее решение в лучшем случае, потому что отправка байтового массива через некоторое время вызывает OutOfMemory Проблема, когда у нас большой bitmap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...