gpt4 book ai didi

android - 如何调整图像大小以适应多种屏幕密度

转载 作者:太空狗 更新时间:2023-10-29 16:06:19 26 4
gpt4 key购买 nike

我需要为网格项添加头像。

我想知道如何处理从手机图库中选择的图像的大小调整。一旦选择,我想需要调整一些大小,以适应网格。

但是,我是否需要为每个屏幕密度存储调整大小的图像?存储一个 xhdpi 版本并为其他设备缩小,或者以其他方式变得更聪明?

原因是,该应用将此图像存储到云数据库中,其他人可以下载此图像。他们可能会在不同的设备上看到图像(因此需要不同的图像尺寸)。这个图片的管理应该怎么处理?

最佳答案

我希望您发现下面的代码有用。它将以最小的开销返回具有所需尺寸的图像。我已经用过很多次了,就像魅力一样。您可以根据目标设备设置所需的维度。缩放会导致图片模糊,但这不会。

private Bitmap getBitmap(Uri uri) {                             
InputStream in = null;
try {
final int IMAGE_MAX_SIZE = 200000; // 0.2MP
in = my_context.getContentResolver().openInputStream(uri);

// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true; //request only the dimesion
BitmapFactory.decodeStream(in, null, o);
in.close();

int scale = 1;
while ((o.outWidth * o.outHeight) * (1 / Math.pow(scale, 2)) > IMAGE_MAX_SIZE) {
scale++;
}

Bitmap b = null;
in = my_context.getContentResolver().openInputStream(uri);
if (scale > 1) {
scale--;
// scale to max possible inSampleSize that still yields an image
// larger than target
o = new BitmapFactory.Options();
o.inSampleSize = scale;
b = BitmapFactory.decodeStream(in, null, o);
// resize to desired dimensions
int height = b.getHeight();
int width = b.getWidth();

double y = Math.sqrt(IMAGE_MAX_SIZE
/ (((double) width) / height));
double x = (y / height) * width;

Bitmap scaledBitmap = Bitmap.createScaledBitmap(b, (int) x, (int) y, true);
b.recycle();
b = scaledBitmap;
System.gc();
} else {
b = BitmapFactory.decodeStream(in);
}
in.close();

return b;
} catch (IOException e) {

return null;
}

}

关于android - 如何调整图像大小以适应多种屏幕密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659682/

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