18

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

Resources res = context.getResources();

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

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

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

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

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

4

2 回答 2

35

定义一个新的类成员变量: Bitmap mScaledBackground; 然后,将新创建的缩放位图分配给它: mScaledBackground = scaled; 然后,调用您的 draw 方法: canvas.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);
canvas.drawBitmap(mBackground, src, dest, null);
于 2012-05-02T03:04:02.097 回答
0

要绘制缩放位图,您要将缩放位图保存在某处的字段中(此处称为mScaled)并调用:

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

在您的绘图方法中(或您现在调用它的任何地方)。

于 2012-05-02T03:05:00.180 回答