gpt4 book ai didi

android - 使用 BitmapFactory.decodeResource() 对 PNG 重新采样后出现意外的位图大小

转载 作者:行者123 更新时间:2023-11-30 00:37:39 25 4
gpt4 key购买 nike

我在 res/drawable 文件夹中有一个 PNG 文件。它的大小是2524*2524。

在将它加载到 ImageView 之前,我想根据 ImageView 的尺寸调整它的大小。因此,我编写了以下实用程序代码以将 PNG 调整为 Bitmap。 (来自 https://developer.android.com/topic/performance/graphics/load-bitmap.html 的略微修改版本)

public static Bitmap decodeSampledBitmapFromResource(
Resources res, int resId, int targetWidth, int targetHeight) {

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);

options.inSampleSize = calculateInSampleSize(options, targetWidth, targetHeight);
options.inJustDecodeBounds = false;
Bitmap result = BitmapFactory.decodeResource(res, resId, options);

Log.d(TAG, "Result bitmap size: " + result.getWidth() + "*" + result.getHeight());
return result;
}

private static int calculateInSampleSize(
BitmapFactory.Options options, int targetWidth, int targetHeight) {

Log.d(TAG, "Target bitmap size: " + targetWidth + "*" + targetHeight);
int width = options.outWidth;
int height = options.outHeight;
Log.d(TAG, "Source bitmap size: " + width + "*" + height);

int inSampleSize = 1;
while ((width /= 2) >= targetWidth &&
(height /= 2) >= targetHeight) {
inSampleSize *= 2;
}

Log.d(TAG, "inSampleSize: " + inSampleSize);
return inSampleSize;
}

在我的例子中,源PNG图像是2524*2524ImageView中是500*500像素 大小。所以我期望 inSampleSize 的值为 4 并且重新采样的位图大小为 631*631 (2524/4 * 2524/4)。

但是,日志为我提供了以下信息:

D/ImageResizer: Target bitmap size: 500*500
D/ImageResizer: Source bitmap size: 2524*2524
D/ImageResizer: inSampleSize: 4
D/ImageResizer: Result bitmap size: 1656*1656

inSampleSize 的值是正确的。但是结果位图大小不是我所期望的。 2524 甚至不能被 1656 整除。这是为什么?

最佳答案

从资源解码会自动将图像文件调整为 gui 尺寸。

最好把文件放到assets目录下

并使用 Assets 管理器和 decodeFromStream()。

关于android - 使用 BitmapFactory.decodeResource() 对 PNG 重新采样后出现意外的位图大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43138348/

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