Нарисуйте масштабированное растровое изображение на холст?

Следующий код определяет мое растровое изображение:

Resources res = context.getResources();

    mBackground = BitmapFactory.decodeResource(res,
            R.drawable.bg2);

    //scale bitmap
    int h = 800; // height in pixels
    int w = 480; // width in pixels    
    Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true); // Make sure w and h are in the correct order

... И следующий код используется для его выполнения/рисования (немасштабированное растровое изображение):

c.drawBitmap(mBackground, 0, 0, null);

Мой вопрос: как я могу установить его для рисования масштабированного растрового изображения, полученного в виде "Растровое масштабирование", а не оригинала?

Ответ 1

Определите новую переменную-член класса: Bitmap mScaledBackground; Затем назначьте его вновь созданное масштабированное растровое изображение: mScaledBackground = scaled; Затем вызовите метод draw: c.drawBitmap(mScaledBackground, 0, 0, null);

Заметьте, что размер экрана жесткого кода не так хорош, как вы сделали в своем фрагменте выше. Лучше было бы выбрать размер экрана вашего устройства следующим образом:

int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();

И, вероятно, лучше не объявлять новое растровое изображение с единственной целью рисовать исходный фон масштабированным способом. Растровые изображения потребляют много ценных ресурсов, и, как правило, телефон ограничен несколькими растровыми изображениями, которые вы можете загрузить, прежде чем ваше приложение бесцеремонно потерпит неудачу. Вместо этого вы можете сделать что-то вроде этого:

Rect src = new Rect(0,0,bitmap.getWidth()-1, bitmap.getHeight()-1);
Rect dest = new Rect(0,0,width-1, height-1);
c.drawBitmap(mBackground, src, dest, null);

Ответ 2

Чтобы нарисовать масштабированное растровое изображение, вы хотите сохранить масштабированное растровое изображение в поле где-нибудь (здесь называется mScaled) и вызвать:

    c.drawBitmap(mScaled,0,0,null);

в методе рисования (или там, где вы это называете прямо сейчас).