Растровое изображение Android getPixel зависит от плотности? - PullRequest
0 голосов
/ 28 октября 2011

Право на код.Учитывая

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
Drawable drawable = getResources().getDrawable(resId);

, я получаю

bitmap.getWidth() == drawable.getIntrinsicWidth() == 9

, хотя фактическое изображение составляет 6x6 пикселей.Дело в том, что плотность равна 240, поэтому масштаб составляет от 1.5 до DENSITY_DEFAULT = 160.Это не было бы такой проблемой само по себе, но bitmap.getPixel(x, y); также работает с увеличенными размерами.

Настройки плотности растрового изображения, кажется, не имеют значения.Как я должен запросить изображение для пикселя в реальной позиции?Я бы предпочел не делить все на плотность (иногда даже невозможно).

Спасибо

1 Ответ

3 голосов
/ 28 октября 2011

Сначала несколько комментариев о том, что здесь происходит.Растровое изображение, которое вы получаете, фактически пересэмплируется;его данные пикселей для изображения 9x9.На метод bitmap.getWidth() не влияют вызовы bitmap.setDensity().

Чтобы загрузить растровое изображение, не позволяя платформе Android изменить его для вас, создайте экземпляр BitmapFactory.Options и установите inScaled в false, затем передайте его в decodeResource ():

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId, options);
// Now bitmap.getWidth() == 6

Обратите внимание, что это измененная версия, которая используется в пользовательском интерфейсе (если вы явно не работаете с этим), поэтому, если вы хотите сделать bitmap.getPixel(x,y); для растрового изображения, которое рисуется в пользовательском интерфейсе, вы не должны использовать inScaled = false.

...