当前位置: 首页 > 知识库问答 >
问题:

将位图缩放到特定大小,保持纵横比,并用0 alpha像素填充其余部分

景永望
2023-03-14

我一直在寻找这个问题的解决方案已经有一段时间了,但还没有找到任何符合我需要的。

我想将位图缩放到特定大小,同时保持纵横比。可以将其视为在ImageView中仅在新位图中使用fitCenter缩放位图。

源位图必须适合具有特定大小的目标位图,其余像素必须透明。

我试过这样使用Glide:

Glide.with(context).load(url)
                            .asBitmap()
                            .override(1280, 720)
                            .fitCenter()
                            .into(1280, 720)
                            .get();

但该方法返回一个仅适合宽度(或高度)的位图,并包裹大小。

我听说使用Canvas是一个可能的解决方案,但还没有找到任何方法来实现我的目标。

如有任何帮助或见解,将不胜感激。如果有要求,我会发布任何必要的澄清。

共有1个答案

仉运乾
2023-03-14

我设法使用此函数解决了它:

Bitmap resizeBitmap(Bitmap image, int destWidth, int destHeight) {
    Bitmap background = Bitmap.createBitmap(destWidth, destHeight, Bitmap.Config.ARGB_8888);
    float originalWidth = image.getWidth();
    float originalHeight = image.getHeight();
    Canvas canvas = new Canvas(background);

    float scaleX = (float) 1280 / originalWidth;
    float scaleY = (float) 720 / originalHeight;

    float xTranslation = 0.0f;
    float yTranslation = 0.0f;
    float scale = 1;

    if (scaleX < scaleY) { // Scale on X, translate on Y
        scale = scaleX;
        yTranslation = (destHeight - originalHeight * scale) / 2.0f;
    } else { // Scale on Y, translate on X
        scale = scaleY;
        xTranslation = (destWidth - originalWidth * scale) / 2.0f;
    }

    Matrix transformation = new Matrix();
    transformation.postTranslate(xTranslation, yTranslation);
    transformation.preScale(scale, scale);
    Paint paint = new Paint();
    paint.setFilterBitmap(true);
    canvas.drawBitmap(image, transformation, paint);
    return background;
}
 类似资料:
  • 我有一个。的数据是从服务器请求的。 以下是中的项布局: 我从服务器请求数据,获取图像url并将图像加载到 适配器中有方法的代码 图像大小为。我在我的Nexus4上运行我的应用程序。图像填充宽度,但高度不缩放。不显示整个图像。 我如何解决这个问题?

  • 问题内容: 有什么明显的方法可以实现我所缺少的吗?我只是想制作缩略图。 问题答案: 定义最大尺寸。然后,通过计算调整大小比例。 适当大小。 当然,还有一个库方法可以做到这一点:。 以下是PIL文档中的一个(经过编辑的)示例。

  • 我希望一个图像填充其容器宽度的100%,并且我希望它设置最大高度属性,所有这些都保持纵横比,但允许丢失图像的任何部分。 我知道可以用背景大小属性做类似的事情,但我想把它变成内联的 你知道我如何使用CSS实现这一点吗?还是javascript?

  • 我正在处理图像,我遇到了一个关于纵横比的问题。 可以看到,和已经指定。我为图像添加了CSS规则: 但是对于,我接收到和。如何设置图像的大小,同时保持他们的纵横比。

  • 问题内容: 我有一个48x48的div,里面有一个img元素,我想将它放到div中而不丢失任何部分,同时保持比例,是否可以使用html和css实现? 问题答案: 如果您在编写CSS时不知道图像的尺寸,则需要一些JavaScript来防止裁剪。 HTML和JavaScript 的CSS 如果您使用JavaScript库,则可能要利用它。

  • 我已经尝试了上面问题中的其他东西,但我不能得到我想要的结果(状态栏下面的背景图像)。我做错了什么?以下是重要的整个源代码(我排除了样板) PS:我想保留状态栏。我想要的是像链接问题的截图:全屏图像和图像上方的半透明状态栏。如果我将背景图像设置为根布局,我会得到我想要的结果,除了图像纵横比没有保持。见下图。 舱单 这种布局奏效了。