gpt4 book ai didi

android - BitmapFactory 从可绘制对象和文件返回不同大小的位图

转载 作者:搜寻专家 更新时间:2023-11-01 09:46:19 27 4
gpt4 key购买 nike

我有同一张图片的两份副本。其中一个在应用程序的资源文件夹(默认可绘制对象)中,另一个在外部存储中。

我用以下代码得到了位图:

 // Get from storage
BitmapFactory.decodeFile(image.getAbsolutePath());

// Get from resource
BitmapFactory.decodeResource(getResources(), R.drawable.image);

但是,它们会在 ImageView 中产生不同的尺寸,其中 wrap_content 的高度和宽度。我该如何解决这个问题?

最佳答案

此行为是因为 BitmapFactory 的实现。在从 decodeResource 调用 decodeResourceStream 期间,它将分配一个 BitmapFactory.Options 并将 inDensity 设置为 DisplayMetrics.DENSITY_DEFAULT 如果 BitmapFactory.Options 为空。

另一方面,decodeFile 通过 setDensityFromOptions 传递,如果 BitmapFactory.Options 为 null,它会立即返回。

因此,解决方案之一是通过以下代码缩放decodeFile的密度。

BitmapFactory.Options option = new BitmapFactory.Options();
option.inDensity = DisplayMetrics.DENSITY_DEFAULT;
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(), option);

如果想反过来做,可以用下面的代码。

InputStream inputStream = context.getResources().openRawResource(R.drawable.image);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

注意会出现“Constants and Resource Type Mismatches”,但是还是可以编译的。 decodeResource 还调用 openRawResource 作为 InputStream,所以这没问题。

关于android - BitmapFactory 从可绘制对象和文件返回不同大小的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922725/

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