Как загрузить растровое изображение из res без изменения размера?

Используя этот код:

    Drawable blankDrawable = context.getResources().getDrawable(image);
    Bitmap blankBitmap=((BitmapDrawable)blankDrawable).getBitmap();

Я получаю растровое изображение, которое масштабируется до плотности контекста, сохраняя физический размер растрового изображения (на основе его значения dpi). Так, например, у меня есть 405x500 битмап (dpi = 96) в качестве ресурса. Но когда я загружаю его на устройство, я получаю изображение 608х750 с плотностью = 240. Я хочу загрузить растровое изображение без масштабирования. Как это сделать?

Этот вопрос очень похож на:

Как создать Drawable из потока без изменения его размера?

Однако это решение не может быть использовано в моем случае, потому что у меня нет входного потока. Все, что у меня есть, это идентификатор ресурса, а метод getDrawable() не имеет параметров для плотности. Как только битмап загружен, слишком поздно - он уже был изменен.

Спасибо.

Ответы

Ответ 1

Создайте дискету (без hdpi/mdpi etc) в res. Держите выталкиваемый в этой папке. Теперь попробуйте. Это может вам помочь.

Ответ 2

используйте этот

InputStream is = this.getResources().openRawResource(imageId);
Bitmap originalBitmap = BitmapFactory.decodeStream(is);  
imageview.setImageBitmap(originalBitmap);

Ответ 3

Когда вы декодируете растровое изображение с помощью

BitmapFactory.decodeResource (Resources res, int id, BitmapFactory.Options opts) 

Установите флаг inScaled в BitmapFactory.Options в false сначала.

Пример:

/* Set the options */
Options opts = new Options();
opts.inDither = true;
opts.inPreferredConfig = Bitmap.Config.RGB_565;
opts.inScaled = false; /* Flag for no scalling */ 


/* Load the bitmap with the options */
bitmapImage = BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.imageName, opts);

Ответ 4

Другим хорошим вариантом может быть размещение растрового изображения в папке ресурса drawable-nodpi

Ответ 5

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView image = (ImageView) findViewById(R.id.test_image);
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
    image.setImageBitmap(bMap);
}

Сначала создайте экземпляр ImageView, содержащий ImageView, из макета. Затем создайте растровое изображение из значка приложения (R.drawable.icon) с помощью BitmapFactory.decodeResource(). Наконец, установите новое растровое изображение как изображение, отображаемое в компоненте ImageView макета.