在画布上绘制缩放的位图?

tad*_*son 15 android

以下代码定义了我的位图:

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
Run Code Online (Sandbox Code Playgroud)

...以下代码用于执行/绘制它(未缩放的位图):

c.drawBitmap(mBackground, 0, 0, null);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何设置它来绘制以"Bitmap scaled"形式返回的缩放位图,而不是原始?

epi*_*rns 33

定义一个新的类成员变量: Bitmap mScaledBackground; 然后,将新创建的缩放位图分配给它: mScaledBackground = scaled; 然后,调用draw方法: c.drawBitmap(mScaledBackground, 0, 0, null);

请注意,以您在上面的代码段中的方式硬编码屏幕大小并不是一个好主意.更好的方法是以下列方式获取设备屏幕大小:

int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();
Run Code Online (Sandbox Code Playgroud)

最好不要为了以缩放方式绘制原始背景的唯一目的而声明新的位图.位图消耗了大量宝贵资源,通常手机仅限于几兆位的位图,您可以在应用程序失败之前加载这些位图.相反,你可以做这样的事情:

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);
Run Code Online (Sandbox Code Playgroud)