Растровое сжатие не меняет размер растрового байта

Я пытаюсь уменьшить размер растрового изображения с помощью метода сжатия.

Это мой код:

public Bitmap compressImage(Bitmap image) {
        Bitmap immagex = image;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        Log.i("before compress", immagex.getByteCount()+"");

        boolean compress = immagex.compress(Bitmap.CompressFormat.JPEG, 10, baos);

        if(compress)
            Log.i("after compress", immagex.getByteCount()+"");
        else
            Log.i("bad compress", "bad compress");

        return immagex;
    }

Когда я проверяю свои журналы, я получаю:

11-28 11:10:38.252: I/before compress(2429): 374544
11-28 11:10:38.262: I/after compress(2429): 374544

Почему компресс не работает?

ОБНОВИТЬ:

Я попробовал этот код:

public Bitmap compressImage(Bitmap image) {
        Bitmap immagex = image;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        Log.i("before compress", immagex.getByteCount()+"");

        boolean compress = immagex.compress(Bitmap.CompressFormat.JPEG, 10, baos);

        Log.i("after compress 2", decodeSampledBitmapFromByte(image.getWidth(), image.getHeight(), baos.toByteArray()).getByteCount()+"");

        return immagex;
    }

Все тот же счетчик байтов

11-28 11:33:04.335: I/before compress(3472): 374544
11-28 11:33:04.395: I/after compress 2(3472): 374544

3 ответа

Ниже приведен код для уменьшения размера растрового изображения и преобразования его в base64,

    Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, true);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    newBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] byteArray = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

    Log.e("Base 64 String", imageEncoded);

Используя Bitmap.compress(), вы просто указываете алгоритм сжатия, и, кстати, операция сжатия занимает довольно много времени. Если вам нужно поиграть с размерами, чтобы уменьшить выделение памяти для вашего изображения, вам точно нужно использовать масштабирование вашего изображения с помощью Bitmap.Options, сначала вычисляя границы растрового изображения, а затем декодируя его до указанного вами размера.

Лучший образец, который я нашел на Stackru, это этот. Проблема с нехваткой памяти при загрузке изображения в растровый объект

Сжатие не изменяет размер растрового изображения. Вы должны посмотреть на размер выходного потока байтов, который содержит сжатые данные.

Другие вопросы по тегам