Как уменьшить размер необработанного изображения?

Я создаю приложение на Android, которое использует считыватель отпечатков пальцев, проблема в том, что изображения находятся в реальном времени, с размерами 800x750 и размером массива байтов 600000, при преобразовании его в растровое изображение и назначении его в просмотре изображений, приложение слишком обнадеживает и дает сбой. как я могу уменьшить размер этого массива байтов, который является необработанным изображением, чтобы мое приложение могло без проблем рисовать отпечатки пальцев

imagePreview.setImageBitmap(imageData.toBitmap());

Я пробовал это, но все равно медленно

Bitmap bmp = imageData.toBitmap();
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.JPEG, 30, stream);
                        byte[] byteArray = stream.toByteArray();

                        BitmapFactory.Options options = new BitmapFactory.Options();
                        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
                        options.inSampleSize = 2;
                        Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length,options);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
37
2

Ответы 2

Вы не можете. Если вы используете ARGB_8888, изображение займет в памяти 4 байта * ширина * высота. Нет никакого способа уменьшить это. Если у вас возникли проблемы, поищите утечки памяти и рассмотрите возможность кэширования.

Этот ответ поможет

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

public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
    int width = image.getWidth();
    int height = image.getHeight();

    float bitmapRatio = (float)width / (float) height;
    if (bitmapRatio > 1) {
        width = maxSize;
        height = (int) (width / bitmapRatio);
    } else {
        height = maxSize;
        width = (int) (height * bitmapRatio);
    }
    return Bitmap.createScaledBitmap(image, width, height, true);
 }

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