2012-05-02 67 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(); 

那将是可能会更好,不申报新位图绘制您的原始背景的缩放方式的唯一目的。位图会消耗大量宝贵资源,并且通常手机仅限于几MB的位图,您可以在应用程序不合格地失败之前加载这些位图。相反,你可以做这样的事情:

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

在抽签方法(或者你现在所称的地方)。