gpt4 book ai didi

java - 将位图大小调整为 512x512 而不改变原始纵横比

转载 作者:行者123 更新时间:2023-11-30 05:11:01 33 4
gpt4 key购买 nike

我有一个创建的位图。尺寸不具体。有时是 120x60、129x800、851x784。它没有特定的值...我想让这些位图始终调整为 512x512,但不改变原始图像的纵横比。并且没有裁剪。新图像必须具有 512x512 Canvas ,原始图像必须居中且没有任何裁剪。

我正在使用此功能调整位图的大小,但它使图像变得非常糟糕,因为图像适合 X 和 Y。我不希望图像同时适合 x 和 y 适合其中之一并保持其纵横比。

 public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// CREATE A MATRIX FOR THE MANIPULATION
Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
matrix.postScale(scaleWidth, scaleHeight);

// "RECREATE" THE NEW BITMAP
Bitmap resizedBitmap = Bitmap.createBitmap(
bm, 0, 0, width, height, matrix, false);
bm.recycle();
return resizedBitmap;
}

我有什么;

enter image description here

我想要的;

enter image description here

最佳答案

好的,所以你真的很接近。我现在无法对此进行测试,但基本上需要更改的是

1) 您需要对 X 和 Y 应用相同的比例,因此您需要选择较小的(如果不起作用,请尝试较大的)。

matrix.postScale(Math.min(scaleWidth, scaleHeight), Math.min(scaleWidth, scaleHeight));

2) 结果将是位图,其中至少一侧大 512 像素,另一侧较小。因此,您需要添加填充以使该侧适合 512px(左右/顶部和底部均等以居中)。为此,您需要创建所需大小的新位图:

Bitmap outputimage = Bitmap.createBitmap(512,512, Bitmap.Config.ARGB_8888);

3) 最后取决于 resizedBitmap 的哪一边是512px你需要绘制resizedBitmapoutputImage 中的正确位置

Canvas can = new Canvas(outputimage);
can.drawBitmap(resizedBitmap, (512 - resizedBitmap.getWidth()) / 2, (512 - resizedBitmap.getHeight()) / 2, null);

注意这里,512 - resizedBitmap.getWidth()结果 0因此在正确尺寸的一侧没有填充。

4) 现在返回outputImage

关于java - 将位图大小调整为 512x512 而不改变原始纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53752398/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com