我有两张相同的照片。其中一个在应用程序的资源文件夹(默认可绘制)中,另一个在外部存储中。
我得到带有以下代码的Bitmap
:
// Get from storage
BitmapFactory.decodeFile(image.getAbsolutePath());
// Get from resource
BitmapFactory.decodeResource(getResources(), R.drawable.image);
但是,它们在
ImageView
中导致不同的大小,在高度和宽度上导致wrap_content
。我该怎么解决? 最佳答案
这种行为是因为BitmapFactory
的实现。在从decodeResourceStream
调用decodeResource
期间,如果BitmapFactory.Options
为空,它将把inDensity
wtihDisplayMetrics.DENSITY_DEFAULT
设置为BitmapFactory.Options
。
另一方面,decodeFile
通过setDensityFromOptions
传递,如果BitmapFactory.Options
为空,则立即返回。
因此,解决方案之一是通过以下代码缩放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);
注意,将有“常量和资源类型不匹配”,但它仍然可以被编译。
decodeResource
也可以将openRawResource
称为InputStream
,这样就可以了。关于android - BitmapFactory从可绘制和文件中返回位图的差异大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37922725/