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

时间:2016-07-25 17:22:55

标签: android canvas android-canvas android-bitmap

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

这是我尝试过的,但它切断了大部分图像:

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

我知道我做错了一些事,但我不确定是什么。此代码会导致图像超出屏幕大小。我希望它缩放到屏幕的大小。我也将绘制更小的图像,我还需要将根据缩放到屏幕大小,但不是全屏。

3 个答案:

答案 0 :(得分:2)

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

看看上面的代码。你没有缩放图片。你只是将图片的一部分(在这种情况下是整个图片)并将其粘贴到某处(在这种情况下是原始图片的大小)。

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

答案 1 :(得分:0)

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

如果你得到这样的宽度和高度,你就不会考虑任何工具栏/状态栏/导航栏的大小。

如果您使用View对应用进行编码,请使用全尺寸ImageView(即match_parent)来扩充布局,然后使用scaleType缩放/拟合/裁剪图像的方式。

答案 2 :(得分:0)

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

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

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