Вопрос по android – Рисовать растровое растровое изображение на холсте?

13

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

<code>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
</code>

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

<code>c.drawBitmap(mBackground, 0, 0, null);
</code>

Мой вопрос заключается в том, как мне настроить рисование масштабированного растрового изображения, возвращенного в форме «Растровое масштабированное изображение». а не оригинал?

Ваш Ответ

2   ответа
30

Определите новую переменную члена класса: Bitmap mScaledBackground; Затем присвойте ему только что созданное масштабированное растровое изображение: mScaledBackground = scaled; Затем вызовите метод рисования: 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);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

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

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

Похожие вопросы