Растровая ширина/высота различны после загрузки из ресурса
первый. i'am новичок в Android-кодировании:)
Что я делаю, это загрузить Bitmap из моего res/drawable-mdpi с помощью
BitmapFactory.decodeResource(getResources(), R.drawable.cat_ground_01);
после того, как я выхожу из ширины/высоты растрового изображения, он сообщает мне другое значение, то есть битмап-реальность.
Это, возможно, трудно разместить Bitmaps pixelperfect, например. накладывать растровое изображение лица с растровым изображением.
Возможно, я просто не хватаю знаний для этой темы: 9
Надеюсь, вы сможете помочь.
Ответы
Ответ 1
Когда вы выполняете Bitmapfactory.decodeResource(), Android по умолчанию будет выбирать версию "согласованного" dpi для декодирования, что произойдет в вашем упомянутом коде:
-
Вы не можете указать, находится ли он в mdpi, hdpi или что-то еще, он выберет версию, соответствующую вашей системе. то есть, если вы работаете на устройстве mdpi, он будет декодировать версию mdpi; в ldpi, затем версия ldpi.
-
Предположим, что вы используете устройство hdpi, но ресурс mdpi не определен, что он будет делать, это взять ваш ресурс mdpi, а во время декодирования он превратится в hdpi (т.е. увеличит растровое изображение mdpi до примерно в 1,5 раза); снова, если ваше устройство имеет более низкое разрешение, оно уменьшит изображение
Я думаю, это то, что происходит с тобой. Для BitmapFactory у него есть возможность НЕ масштабировать изображение:
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
Установите значение inScaled в false.
Ответ 2
Не можете ли вы просто поместить ресурс в папку nodpi?
то есть. разреш/вытяжка-nodpi
Это то, что я делал в прошлом.
Ответ 3
после того, как я выхожу из ширины/высоты растрового изображения, он сообщает мне другое значение, то есть битмап-реальность.
Проверьте свои параметры. InTargetDensity и options.inDensity после загрузки Bitmap из /drawable. Они не равны (например, 160 и 240). Если options.inScaled установлен в true (по умолчанию) - то почему битмап автоматически масштабируется.
Другой способ - использовать Bitmap.createScaledBitmap, чтобы перемасштабировать изображение после загрузки. Потому что иногда вам нужно inScaled = true
//Target dimensions
int iW = 300;
int iH = 200;
Bitmap mOriginalBitmap = new Bitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
//Load image from resource
mOriginalBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.sample_image_900px, options);
//Scale to target size
mOriginalBitmap = Bitmap.createScaledBitmap(mOriginalBitmap, iW, iH, true);