Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
alsh
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 22
#1

Сохранить картинку на канве - Программирование Android

23.05.2015, 18:46. Просмотров 407. Ответов 6
Метки нет (Все метки)

Здравствуйте! Делаю игру, и ее часть - это "комната" рисования, где должно сохраняться текущее нарисованное изображение. В ней в виде customView расположен холст, на котором пользователь что-то рисует. Но если ему из этой "комнаты" выйти и опять зайти, то нарисованного ранее конечно уже не будет. Много уже сайтов с решениями перелопатил, но ничего не помогает - или ошибки, или просто ничего не сохраняется. Вот нынешний вариант:

В onCreate():
Java
1
2
3
 encoded=sp.getString("drawedImage", "");
imageAsBytes=Base64.decode(encoded, 0);
if(!encoded.equals("")) {waxboardView.bitmapCanvas.drawBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length), 0, 0, null);}
Метод с сохранением:
Java
1
2
3
4
5
6
7
8
9
public void saveBoard(){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        waxboardView.bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object
        b = baos.toByteArray();
        encoded = Base64.encodeToString(b, Base64.DEFAULT);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("drawedImage", encoded);
        editor.apply();
    }
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2015, 18:46     Сохранить картинку на канве
Посмотрите здесь:

Не отображает картинку - Программирование Android
Подскажите, в чём ошибка в приведённом коде. Пытаюсь вывести на экран простой png, но почему-то не получается. Я только начинаю изучать...

Вставить картинку - Программирование Android
Можно ли как-то через XML вставить картинку на экран?

из c# byte получить картинку - Программирование Android
Есть массив байтов приходит из веб сервиса Как из этого получить картинку? p.s. мучаюсь 2 дня нечего не получается... пробую...

Наложить на картинку текст - Программирование Android
Делаю фотографие и нужно в нижнем правом углу написать 3 строки. Как это сделать? Красиво и экономя память.. Интересен ваш вариант -...

Добавить картинку на форму - Программирование Android
Есть форма, нужно вставить картинку, стандартные только ставятся, а мне нужно свою картинку поставить, как это сделать??

Загрузить картинку в layout - Программирование Android
Доброго времени суток! У меня такая проблема ! Я загружаю из ресурса drawable картинку вот такам образом! imgView = (ImageView)...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 651
23.05.2015, 21:51     Сохранить картинку на канве #2
С сайта stackoverflow.com код(попробовал. работает):
Java
1
2
3
4
5
6
7
Bitmap bitmap;  // ссылка на существующий битмап
Context context; //ссылка на контекст приложения
 
//открываем файл в приватном каталоге нашей аппы
OutputStream stream = context.openFileOutput("test.png", MODE_WORLD_WRITEABLE);
bitmap.compress(CompressFormat.PNG, 70, stream);// пишем битмап на PNG с качеством 70%
stream.close();
alsh
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 22
23.05.2015, 22:29  [ТС]     Сохранить картинку на канве #3
Спасибо большое! Но как мне теперь отобразить сохраненное изображение при следующих заходах пользователя в эту комнату?
И ничего, что у меня получилось только так (на Ваш вариант без try/catch ругается):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public void saveBoard(){
        OutputStream stream = null;
        try {
            stream = ctxt.openFileOutput("test.png", MODE_WORLD_WRITEABLE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        waxboardView.bitmap.compress(Bitmap.CompressFormat.PNG, 70, stream);// пишем битмап на PNG с качеством 70%
        try {
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 651
23.05.2015, 22:37     Сохранить картинку на канве #4
try/catch разумеется нужент. вот как с делал:

Java
1
2
3
4
5
6
7
8
9
10
OutputStream stream = null;
        try {
            stream = this.openFileOutput("test.png", MODE_WORLD_WRITEABLE);
            bitmap.compress(Bitmap.CompressFormat.PNG, 70, stream);// пишем битмап на PNG с качеством 70%
            stream.close();
        } catch (FileNotFoundException e) {
            Toast.makeText(this, "FileNotFoundException", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(this, "IOException", Toast.LENGTH_SHORT).show();
        }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
imageView = (ImageView) findViewById(R.id.imageView2);
Bitmap bitmap = getBitmap();
imageView.setImageBitmap(bitmap);
 
//.................
 
private Bitmap getBitmap() {
        InputStream is = null;
        Bitmap bitmap = null;
 
        try {
            is = this.openFileInput("test.png");
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(bitmap == null) {
            bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        }
        return bitmap;
    }
alsh
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 22
24.05.2015, 09:15  [ТС]     Сохранить картинку на канве #5
Эх, опять у меня не клеится... У меня, правда, нарисованный битмап выводится на канву, но не суть, метод я переделал правильно. Так вот, там, где в onCreate() imageView.setImageBitmap(bitmap) выдаёт nullPointerException и говорит, что длина и ширина должны быть больше нуля. Так как моё приложение должно работать на разных разрешениях, то их определить точно нельзя. Я пытался высчитывать длину и ширину не сразу, ставил в качестве размеров ViewGroup.LayoutParams.MATCH_PARENT, но все равно nullpointerexceotion((
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 651
24.05.2015, 10:42     Сохранить картинку на канве #6
alsh, код покажи
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2015, 10:50     Сохранить картинку на канве
Еще ссылки по теме:

Расставить картинку по координатам - Программирование Android
Всем привет. Парни, не могу понять как быть. У меня есть лаяут...сложный лаяут по которому на экране выставляются картинки. Я хочу...

Выбрать картинку по указанному пути - Программирование Android
Никак не получается выбрать картинку из заранее указанной папки. Открывается всегда галерея по умолчанию. Intent selectIntent = new...

Как записать/прочитать картинку? - Программирование Android
как записать\прочитать картинку?

Как сделать картинку фоном? - Программирование Android
Подскажите, как установить картинку фоном? какие должны быть размеры картинки?


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

Или воспользуйтесь поиском по форуму:
alsh
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 22
24.05.2015, 10:50  [ТС]     Сохранить картинку на канве #7
Перед onCreate:
Java
1
2
 Context ctxt;
    Bitmap btmp;
в onCreate:
Java
1
2
 btmp=getDrawedBitmap();
        waxboardView.bitmapCanvas.setBitmap(btmp);
Получение картинки с холста:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  private Bitmap getDrawedBitmap() {
        InputStream is = null;
        if(waxboardView.bitmap == null) {
            waxboardView.bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.black); 
        }
        else {
            try {
                is = this.openFileInput("test.png");
                waxboardView.bitmap = BitmapFactory.decodeStream(is);
                is.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }};
        return  waxboardView.bitmap;
    }
Сохранение картинки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
  public void saveBoard(){
        OutputStream stream = null;
        try {
            stream = this.openFileOutput("test.png", MODE_WORLD_WRITEABLE);
            waxboardView.bitmap.compress(Bitmap.CompressFormat.PNG, 70, stream);
            stream.close();
        } catch (FileNotFoundException e) {
            Toast.makeText(this, "FileNotFoundException", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(this, "IOException", Toast.LENGTH_SHORT).show();
        }
 
    }
WaxboardView - это класс-вьюшка, в нем рисование описано, а код выше - в активити.
Yandex
Объявления
24.05.2015, 10:50     Сохранить картинку на канве
Ответ Создать тему
Опции темы

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