将缩放的位图绘制到画布?

2022-09-02 12:20:11

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

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


答案 1

定义一个新的类成员变量:然后,将新创建的缩放位图分配给它:然后,在 draw 方法中调用:Bitmap mScaledBackground;mScaledBackground = scaled;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);

答案 2

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

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

在你的绘制方法中(或者你现在调用它的任何地方)。


推荐