BitmapFactory возвращает изображение большего размера, чем источник - PullRequest
7 голосов
/ 09 сентября 2011

Привет, я создаю растровое изображение из PNG-изображения с именем image.png.Изображение имеет размер 75 (ширина) х 92 (высота).Когда я запускаю этот код:

Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(),  R.drawable.image
Log.d("image", "height: " + bitmap.getHeight() + " width: " + bitmap.getWidth());

, журнал регистрирует:

DEBUG/image(3550): height: 138 width: 113

, и изображение на экране больше, чем другие изображения, которые имеют размер 75 x 92. Что я могусделать, чтобы Android загрузил изображение с правильным размером?

Ответы [ 4 ]

21 голосов
/ 29 ноября 2012

Мое решение:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;               
Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(),  R.drawable.image, options );
12 голосов
/ 09 сентября 2011

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

Если вы действительно хотите предотвратить масштабирование, попробуйте одно из следующих действий:

  1. Поместите изображение в res / drawable-nodpi (http://developer.android.com/guide/practices/screens_support.html#qualifiers)

  2. Использовать ImageView.ScaleType.CENTER (http://developer.android.com/reference/android/widget/ImageView.ScaleType.html)

  3. Только что нашел этот связанный вопрос на SO: Android: Как остановить Android 1.6+ от масштабирования изображений

4 голосов
/ 09 сентября 2011

Поскольку загрузчик в BitmapFactory применяет масштабирование плотности экрана во время загрузки.Чтобы переопределить это, укажите собственный требуемый inTargetDensity в BitmapFactory.Options при вызове decodeResource.

0 голосов
/ 12 августа 2018

Bitmap thumbImage = Bitmap.createScaledBitmap (BitmapFactory.decodeResource (context.getResources (), R.drawable.image), 640, 640, false);

...