Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
максим2000
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 16
1

Сохранение изображения Android

02.01.2016, 00:41. Просмотров 1946. Ответов 8
Метки нет (Все метки)

Работаю на android всего неделю. Знаю Java SE. Надо получить графику ImageView и сохранить ее в Bitmap и этот Bitmap сохранить во внутренней памяти. Мог бы и Drawable извлечь, но графика вся в методе onClick. Плюс файл не хочет сохраняться. Как достичь нужного мне результата? Есть у кого идеи?
Вот сам код:
Java
1
2
3
4
5
6
7
8
9
10
Bitmap bitmap;
            File image = new File(Environment.getDataDirectory().getPath(),"image.png");
            FileOutputStream streamsave = null;
            try {
               Bitmap img = Bitmap.createBitmap(graphic.getResources().getDisplayMetrics(), graphic.getWidth(),  graphic.getHeight(), Bitmap.Config.ARGB_8888);
                streamsave = new FileOutputStream(image);
                img.compress(Bitmap.CompressFormat.PNG, 85, streamsave);
                streamsave.flush();
                streamsave.close();
            } catch (IOException e) { }catch (NullPointerException e) { }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2016, 00:41
Ответы с готовыми решениями:

Сохранение. Android Studio
Здравствуйте. Пишу приложение в Android studio. Имеется кнопка "продолжить"....

Сохранение выбранного изображения в памяти приложения
Доброго времени суток. Есть imageView, по нажатию выбираю фото из галереи....

Где взять стандартные изображения Android
Где-то можно взять системные изображения из последних версий Андроида? То...

Android Загрузка изображения на стену vkontakte
Здравствуйте всем, возникла необходимость загрузить фотографию на стену...

Откуда берутся атрибуты android:layout_width и android:layout_height в элементе LinearLayout?
Недавно начал изучать Android API, а сегодня более менее разобрал основы...

8
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
02.01.2016, 12:05 2
гадать по куску кода?
разрешения в манифесте для начала проверь
и у меня то самое чувство, когда кто-то пытается сделать непонятно что, но рассказать он не считает нужным
0
максим2000
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 16
02.01.2016, 23:28  [ТС] 3
Паблито, Даже не знаю, что в манифесте этому view надо прописать. Вся графа в onDraw, в канвасе, тип drawOval и прочее. Как этот canvas заполучить в Bitmap виде? Что именно нужно вам показать для ответа?
0
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
03.01.2016, 16:00 4
Лучший ответ Сообщение было отмечено максим2000 как решение

Решение

предположим view это ссылка на нужное нам вью, с которого надо сделать битмап
1. создаем в активити метод
Java
1
2
3
4
5
6
7
8
9
10
11
    private void saveAsBitmap(View view, String filename) {
        view.setDrawingCacheEnabled(true);
        Bitmap bitmap = view.getDrawingCache();
        try {
            FileOutputStream out = openFileOutput(filename, MODE_PRIVATE);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // ставить 85 бесполезно, PNG - это формат сжатия без потерь
            out.close();
        } catch (Exception ignored) {
        }
        bitmap.recycle();
    }
если метод размещать не в акитивити, а в левом классе, то придется передавать в метод еще и ссылку на контекст что бы можно было вызвать методы openFileOutput / openFileInput

2. где-то в коде когда надо записать файл, вызываем наш метод
Java
1
                saveAsBitmap(view, "image.png");
Когда надо будет получить ссылку на файл или FileInputStream, вызываем соответственно методы
Java
1
2
3
File file = getFileStreamPath("image.png");
// или
FileInputStream inputStream = openFileInput("image.png");
1
максим2000
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 16
03.01.2016, 17:53  [ТС] 5
Паблито, При нажатии на кнопку, вызывающую метод, среди процессов вылетает такое

Java
1
2
3
4
5
6
7
8
9
01-03 17:44:43.395 30000-9389/? E/DatabaseUtils: Writing exception to parcel
                                                 java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
                                                     at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
                                                     at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
                                                     at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
                                                     at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
                                                     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
                                                     at android.os.Binder.execTransact(Binder.java:388)
                                                     at dalvik.system.NativeStart.run(Native Method)
Для простоты проект скину
0
Вложения
Тип файла: rar Архив WinRAR.rar (7.10 Мб, 7 просмотров)
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
04.01.2016, 12:20 6
у меня на эмуляторе не выдает ничего такого, а реального устройства нет под рукой
и я тут подумал, все таки строка bitmap.recycle(); у меня там лишняя, ее лучше убрать
0
максим2000
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 16
04.01.2016, 13:44  [ТС] 7
Паблито, Сделал, ошибка больше не вылетает. А сам файл можно сохранить не где-то в дебрях лесных, а например в директиве галереи или вообще в видимых юзеру местах?
0
Pablito
2810 / 2235 / 753
Регистрация: 12.05.2014
Сообщений: 7,819
Завершенные тесты: 1
04.01.2016, 13:59 8
можно например так Не могу сохранить файл на карту
0
максим2000
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 16
04.01.2016, 15:06  [ТС] 9
Паблито, Все! Сработало. Спасибо огромное!
0
04.01.2016, 15:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2016, 15:06

Не предлагается установка Android SDK при установке Android Studio
на сайте https://developer.android.com/studio/... скачал exeшник для...

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка:...

Android studio, как запускать программу сразу на android смартфоне подключенному к usb?
android studio, как запускать программу сразу на android смартфоне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru