Почему BitmapFactory.decodeResource масштабирует мое изображение?
У меня есть изображение размером 120x120 пикселей в моем /res/drawable/
каталог. Это размер, необходимый для всех устройств.
Для загрузки этого растрового изображения я использую следующее:
Bitmap tmpBmp = BitmapFactory.decodeResource(getResources(), R.drawable.myimage);
Проблема в том, что когда я измеряю tmpBmp
, размер 360x360px. Я знаю, как уменьшить масштаб до необходимого мне размера 120x120, но это пустая трата времени на обработку, хотя и минимальная.
Я предполагаю, что это как-то связано с плотностью экрана, так как мой ресурс находится в каталоге без плотности.
В чем причина decodeResource
масштабировать мое изображение? И как мне помешать этому?
2 ответа
По умолчанию drawable
каталог предполагает, что изображения должны быть масштабированы по умолчанию mdpi
размер. Поместите ваши изображения в drawable-nodpi
если вы хотите отключить масштабирование ресурсов.
Обратите внимание, что изображение размером 120x120px, если оно отображается на экране, будет в 3 раза меньше на устройстве xxhdpi по сравнению с устройством mdpi (поскольку число пикселей на дюйм в три раза больше).
Это потому, что плотность вашего экрана и вашего изображения разные. Тогда если не укажете Options
Система сделает это за вас. У источника BitmapFactory
Вы могли видеть это:
public static Bitmap decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, Options opts) {
if (opts == null) {
opts = new Options();
}
if (opts.inDensity == 0 && value != null) {
final int density = value.density;
if (density == TypedValue.DENSITY_DEFAULT) {
opts.inDensity = DisplayMetrics.DENSITY_DEFAULT;
} else if (density != TypedValue.DENSITY_NONE) {
opts.inDensity = density;
}
}
if (opts.inTargetDensity == 0 && res != null) {
opts.inTargetDensity = res.getDisplayMetrics().densityDpi;
}
return decodeStream(is, pad, opts);
}
Поэтому для предотвращения масштабирования необходимо указать Options
парам с inScaled=false
пары. Или поместите свое изображение в res/drawable-nodpi
папка.