Растровая ширина/высота различны после загрузки из ресурса

первый. 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);