Работа с Bitmap

| 21.01.2015

Расмотрим несколько полезных методов для работы с изображениями, а точнее — объектами Bitmap. Bitmap — объект, используя который мы можем осуществлять различные операции с картинками, например, изменение размеров, кадрирование, перекрашивание и т.д. В буквальном переводе Bitmap — это карта битов, то есть каждый «пиксель» изображения может быть описан набором битов.

Создание объекта Bitmap из файла ресурсов

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test);

Тут, как вы уже заметили, используется вспомогательный объект BitmapFactory. Этот метод создает объект Bitmap на основе графического изображения, находящегося в папке drawable.

Кодирование Bitmap в base64-строку

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);

byte[] b = baos.toByteArray();
String strBase64 = Base64.encodeToString(b, 0);

Сначала мы создаем объект Bitmap. Инициализируем выходящий поток ByteArrayOutputStream и пишем в него сжатый Bitmap, используя метод compress(). Затем получаем из этого потока байтовый массив b и вызываем метод Base64.encodeToString(), который вернет нам закодированную base64-строку.

Декодирование base64-строки в Bitmap

String strBase64 = "Здесь закодированная строка";
ImageView iView = (ImageView) findViewById(R.id.iView);
// декодируем строку в массив байтов
byte[] decodedArr = Base64.decode(strBase64, Base64.DEFAULT);
// cоздаем Bitmap
Bitmap decodedBitMap = BitmapFactory.decodeByteArray(decodedArr, 
                0, decodedArr.length);
// добавляем картинку в ImageView
iView.setImageBitmap(decodedBitMap);

Изменение размера изображения

ImageView iView = (ImageView) findViewById(R.id.iView);
// предварительно мы уже получили объект BitMap 
// и сейчас получаем размеры изображения, увеличиваем их вдвое
int width = decodedBitMap.getWidth() * 2;
int height = decodedBitMap.getHeight() * 2;
// создаем новый объект Bitmap с новыми размерами
Bitmap newBitMap = Bitmap.createScaledBitmap(decodedBitMap, width,
                height, false);
// добавляем изображение в ImageView
iView.setImageBitmap(newBitMap);

Очистка старых объектов Bitmap

Как только мы закончили работать с объектом Bitmap мы можем почистить память, что избежать перерасхода ограниченного количества ресурсов. Сделать это можно следующим образом:

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test);
... // здесь работа с Bitmap

// освобождаем ресурсы
if(bm != null) {
    bm.recycle();
    bm = null;
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*