Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
alsh
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 22
1

Сохранить картинку на канве

23.05.2015, 18:46. Просмотров 635. Ответов 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();
    }
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2015, 18:46
Ответы с готовыми решениями:

Нарисовать пятиугольник из дуг на канве
Здравствуйте уважаемые форумчане! Пытаюсь нарисовать правильный пятиугольник с...

ImageView, как наложить картинку на картинку?
Всем привет ,такая проблемка ,пытаюсь наложить картинку на картинку ,но...

Как сохранить картинку
Имеется адрес картинки, как ее сохранить, на компьютер?

Сохранить картинку на форме
Имеется ввиду, что при открытии картинка уже находится на форме. Жду помощи

Сохранить картинку по ссылке
Python 3.x хочу сохранить картинку на комп по прямой ссылке на неё. В гугле...

6
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 671
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();
0
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();
        }
    }
0
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 671
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;
    }
0
alsh
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 22
24.05.2015, 09:15  [ТС] 5
Эх, опять у меня не клеится... У меня, правда, нарисованный битмап выводится на канву, но не суть, метод я переделал правильно. Так вот, там, где в onCreate() imageView.setImageBitmap(bitmap) выдаёт nullPointerException и говорит, что длина и ширина должны быть больше нуля. Так как моё приложение должно работать на разных разрешениях, то их определить точно нельзя. Я пытался высчитывать длину и ширину не сразу, ставил в качестве размеров ViewGroup.LayoutParams.MATCH_PARENT, но все равно nullpointerexceotion((
0
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 671
24.05.2015, 10:42 6
alsh, код покажи
0
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 - это класс-вьюшка, в нем рисование описано, а код выше - в активити.
0
24.05.2015, 10:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2015, 10:50

Сохранить картинку из picturebox
Люди, битый час сижу все перепробовал вот код: Image to_save =...

Сохранить картинку вxml
Здравствуйте. Помогите примеров и советом, как решить мне такую задачу....

Сохранить измененную картинку
В PictureBox я добавляю картинку и кистью рисую по картинке и хочу ее...


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

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

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