Android:如何使用 canvas/draw 位图缩放位图以适应屏幕大小?

Android: How do I scale a bitmap to fit the screen size using canvas/draw bitmap?

我正在拍摄图像并使用 canvas 将其绘制到屏幕上。我想根据屏幕尺寸缩放它。

这是我试过的方法,但是它切掉了一大块图像:

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.myimage);
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);

Rect frameToDraw = new Rect(0, 0, width, height);
RectF whereToDraw = new RectF(0, 0, width, height);

canvas.drawBitmap(bitmap,frameToDraw,whereToDraw, paint);

我知道我做错了几件事,但我不确定是什么。此代码导致图像超出屏幕大小。我希望它被缩放到屏幕的大小。我也会在其中绘制较小的图像,因此我还需要根据 缩放到屏幕大小,但不是全屏。

Rect frameToDraw = new Rect(0, 0, width, height);
RectF whereToDraw = new RectF(0, 0, width, height);

看看上面的代码。你没有缩放图片。您只需截取图片的一部分(在本例中为整张图片)并将其粘贴到某处(在本例中为原始图片的大小)。

frameToDraw矩形的宽度和高度应该是你图片的宽度和高度。

    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;

如果你得到这样的宽度和高度,你就不会考虑任何 toolbar/status bar/navigation 条的大小。

如果您正在编写具有 View 的应用程序,请使用全尺寸 ImageView(即 match_parent)扩充布局,然后使用 scaleType 到 scale/fit/crop 您想要的图像。

不需要创建比例位图,而是:

Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,frameBufferHeight, Config.RGB_565);

frameBufferWidthframeBufferHeight 是您希望基于这些尺寸制作应用的尺寸(例如 480*800

然后只需添加此代码:

Rect dstRect = new Rect();
canvas.getClipBounds(dstRect); // get canvas size base screen size
canvas.drawBitmap(framebuffer, null, dstRect, null);

它根据屏幕尺寸绘制最终位图