Я работаю над функцией загрузки изображения с веб-сервера, отображения его на экране, и, если пользователь хочет сохранить изображение, сохраните его на SD-карте в определенной папке. Есть ли простой способ взять растровое изображение и просто сохранить его на SD-карту в папке по моему выбору?
Моя проблема в том, что я могу загрузить изображение, отобразить его на экране в виде растрового изображения. Единственный способ найти изображение для сохранения изображения в определенной папке - это использовать FileOutputStream, но для этого требуется байтовый массив. Я не уверен, как преобразовать (если это даже правильный путь) из растрового изображения в байтовый массив, поэтому я могу использовать FileOutputStream для записи данных.
Другой вариант - использовать MediaStore:
MediaStore.Images.Media.insertImage(getContentResolver(), bm,
barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");
Который прекрасно работает для сохранения на SD-карту, но не позволяет настроить папку.
mImage.setImageBitmap(_result.getBitmap());
мойonTaskComplete()
обратный вызов. Теперь я должен разрешить пользователям сохранять файл локально, если они хотят через долгое нажатие контекстного меню. Я должен быть в состоянии использовать решение ниже. Что я хочу знать, вы нашли лучший подход к этому?Ответы:
источник
90
в приведенном выше примере не будет иметь никакого эффекта при сохранении в формате PNG, но будет иметь значение для JPEG. В случае JPEG вы можете выбрать любое число от 0 до 100.Вы должны использовать
Bitmap.compress()
метод, чтобы сохранить растровое изображение в виде файла. Он будет сжимать (если позволяет используемый формат) ваше изображение и помещать его в OutputStream.Вот пример полученного с помощью Bitmap экземпляра,
getImageBitmap(myurl)
который можно сжать как JPEG с коэффициентом сжатия 85%:источник
fOut.flush()
, нельзя ли это пропустить?Bitmap.compress
указывает качество.getImageBitmap(myurl)
сгенерирует исключение без разрешения в AndroidManifest.xml (по крайней мере, в os2.2):
источник
Внутри
onActivityResult
:источник
Некоторые форматы, такие как PNG без потерь, будут игнорировать настройку качества.
источник
Вот пример кода для сохранения растрового изображения в файл:
Теперь вызовите эту функцию, чтобы сохранить растровое изображение во внутренней памяти.
File newfile = savebitmap(bitmap)
;Я надеюсь, что это поможет вам. Счастливой жизни кодирования.
источник
источник
Почему бы не вызвать
Bitmap.compress
метод с 100 (который звучит как без потерь)?источник
Я также хотел бы сохранить изображение. Но моя проблема (?) В том, что я хочу сохранить его из растрового изображения, которое я нарисовал.
Я сделал это так:
источник
Способ, который я нашел для отправки PNG и прозрачности.
источник
Создать миниатюру видео для видео. Может вернуть ноль, если видео повреждено или формат не поддерживается.
Чтобы сохранить ваше растровое изображение в SDCard, используйте следующий код
Хранить изображение
Чтобы получить путь для хранения изображений
источник
Вы хотите сохранить растровое изображение в каталог по вашему выбору. Я сделал библиотеку ImageWorker, которая позволяет пользователю загружать, сохранять и конвертировать растровые изображения / drawables / base64 изображения.
Мин СДК - 14
Предпосылка
Сохранение растрового изображения / Drawable / Base64
Загрузка растрового изображения
Реализация
Добавить зависимости
На уровне проекта Gradle
На уровне приложения Gradle
Вы можете прочитать больше на https://github.com/ihimanshurawat/ImageWorker/blob/master/README.md
источник
Эй, просто дайте имя .bmp
Сделай это:
это будет звучать так, будто я ПРОСТО ДУМАЛ ВО ВРЕМЯ, но попробуйте, как только он будет сохранен в bmp foramt..Cheers
источник
Убедитесь, что каталог создан, прежде чем позвонить
bitmap.compress
:источник
После Android 4.4 Kitkat и доли Android 4.4 и менее в 2017 году, составляющей около 20%, уменьшается, сохранить на SD-карту невозможно, используя
File
класс иgetExternalStorageDirectory()
метод. Этот метод возвращает внутреннюю память устройства и сохраненные изображения, видимые для каждого приложения. Вы также можете сохранять изображения только для вашего приложения и удалять, когда пользователь удаляет ваше приложение с помощьюopenFileOutput()
методом.Начиная с Android 6.0, вы можете отформатировать свою SD-карту как внутреннюю память, но только для своего устройства. (Если вы отформатируете SD-автомобиль как внутреннюю память, только ваше устройство может получить доступ или просмотреть его содержимое). Вы можете сохранить на эту SD-карту, используя другие ответы, но если вы хотите использовать съемную SD-карту, вы должны прочитать мой ответ ниже.
Вы должны использовать Storage Access Framework, чтобы получить
onActivityResult
метод действия URI к папке, чтобы получить папку, выбранную пользователем, и добавить извлекаемое постоянное разрешение, чтобы иметь возможность доступа к папке после того, как пользователь перезапустит устройство.Теперь сохраните папку сохранения в общих настройках, чтобы пользователь не выбирал папку каждый раз, когда вы хотите сохранить изображение.
Вы должны использовать
DocumentFile
класс для сохранения вашего изображения, а неFile
илиParcelFileDescriptor
, для получения дополнительной информации вы можете проверить эту ветку для сохранения изображения на SD-карту сcompress(CompressFormat.JPEG, 100, out);
методом иDocumentFile
классами.источник
убедитесь, что вы добавили ниже разрешения
и в AndroidManifest под
затем просто вызовите saveBitmapFile (passYourBitmapHere)
где
и другие методы
а также
источник
error handling for PIE devices..
и я думаю, что рекурсия вgetOutputMediaFile
может быть бесконечным циклом, если обходной путь не удается.Сохранить растровое изображение в вашей галерее без сжатия.
источник
// | == | Создайте файл PNG из растрового изображения:
// | == | Получить Bimap из файла:
источник