Растровое изображение getWidth возвращает неправильное значение

У меня в папке для рисования в приложении для Android есть изображение jpg с разрешением 1000x600. Я загружаю это изображение в растровое изображение, как это

 Bitmap bitMap = BitmapFactory.decodeResource(getResources(), R.drawable.image);

После этого я звоню bitMap .getWidth() который возвращает 1500. Как это может быть? А как правильно подобрать ширину и высоту изображения?

1 ответ

Решение

Это, вероятно, из-за различной плотности. Ваш ресурс, вероятно, хранится в папке средней плотности, но ваше устройство имеет формат hdpi. Средняя плотность 160 точек на дюйм, высокая плотность 240 точек на дюйм. Таким образом, ваше растровое изображение масштабируется в 1,5 раза по сравнению с первоначальным размером. Смотрите документ на нескольких экранах для получения дополнительной информации.

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

Если вы хотели, чтобы это было для высокой плотности, поместите его в drawable-hdpi вместо drawable или drawable-mdpi.

Обновить:

Если вы хотите, чтобы он игнорировал плотность, поместите его в папку drawable-nodpi. Также из того же документа:

Самый простой способ избежать предварительного масштабирования - поместить ресурс в каталог ресурсов с квалификатором конфигурации nodpi. Например:

res/drawable-nodpi/icon.png

Когда система использует растровое изображение icon.png из этой папки, оно не масштабируется в зависимости от текущей плотности устройства.

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