Растровые изображения: правильно рассчитать inSampleSize для существующих растровых изображений - PullRequest
0 голосов
/ 29 сентября 2019

У меня уже есть растровое изображение -

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = calculateInSampleSize(options, 200, 300) ;
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(getIntent().getData()), null, options);
mImageView.setImageBitmap(bitmap);

У меня также есть функция для вычисления inSampleSize, которую я нашел в документах для Android здесь -

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {

    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        while ((halfHeight / inSampleSize) >= reqHeight
                && (halfWidth / inSampleSize) >= reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}

Мои вопросы -

  1. reqWidth и reqHeight являются значениями в пикселях или dp?

  2. Какими должны быть значения reqWidth и reqHeight, чтобы бытьпередается в функцию calcInSampleSize (...)?Независимо от того, что я передаю, он всегда возвращает 1.

Я хочу уменьшить размер растрового изображения в КБ / МБ до уровня, на котором качество остается хорошим на каждом устройстве.

...