Можете ли вы объяснить, что делает этот код? - PullRequest
0 голосов
/ 08 июня 2018

Этот код используется для сжатия и изменения размера изображения в моем приложении. Изображение выглядит размытым, а размер уменьшается до очень.Могу ли я объяснить, как работает этот код и как я могу улучшить качество своего изображения с помощью существующего кода.

BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            final int REQUIRED_SIZE = 200;

            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_SIZE
                    && o.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;

            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            Bitmap bit1 = BitmapFactory.decodeStream(new FileInputStream(f),
                    null, o2);

1 Ответ

0 голосов
/ 08 июня 2018

Ваш код только инициализирует параметры растрового изображения для работы с decodedStream (входным изображением или файлом, с которым вы будете работать), после этого задаете правило, которое говорит, что требуемый размер должен быть> = 200 ширина и высота, и после этогопросто создавая окончательное растровое изображение с требуемым выходным потоком

BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            final int REQUIRED_SIZE = 200;

            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_SIZE
                    && o.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;

            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            Bitmap bit1 = BitmapFactory.decodeStream(new FileInputStream(f),
                    null, o2);
bit1.compress(Bitmap.CompressFormat.PNG, 100, out); //you can use this line and play with the value 100 in order to set quality of the image when its compresed

Поскольку ваше изображение масштабируется до определенного размера (который> = 200 ширина и высота), размер выходного изображения будет зависеть от входного растрового изображениясначала

, если вы хотите проверить размеры растрового изображения, вы можете сделать это

Log.e("Dimensions", bit1.getWidth()+" "+bit1.getHeight());

Bitmap.compress

сжатие (формат Bitmap.CompressFormat, качество int, поток OutputStream) Записать сжатую версию растрового изображения в указанный выходной поток.

РЕДАКТИРОВАТЬ: Как Владислав Матвиенко предлагает вам увеличить значение REQUIRED_SIZE до большего значения,так как, как я написал выше, вы сначала устанавливаете фиксированный размер

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