2012-05-02 4 views
10

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

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); 

Мой вопрос, как мог бы я установить его для рисования масштабированного растрового изображения, возвращенного в виде «растрового масштабирования», а не оригинала?

ответ

25

Определить новую переменную-член класса: 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); 
+1

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

+1

Я знаю, что это старое сообщение. Но для Android 7.0+ вы не сможете рассчитывать на полную ширину/высоту экрана в режиме разделения экрана. Итак, для тех, кто использует это решение, вы должны помнить об этом. – MCLLC

+0

будет таким образом рисовать растровое изображение очень медленно? – Amos

2

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

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

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