Android 为什么程序读取图像文件后分辨率会变小?

Android 为什么程序读取图像文件后分辨率会变小?,android,image,screen,drawable,resolution,Android,Image,Screen,Drawable,Resolution,我遇到了一个问题: 我有不同大小的图像文件。(hdpi、xhdpi、xxhdpi、xxxhdpi) 当我在hdpi、xhdpi、xxhdpi设备中使用中的图像文件时,效果很好 但是当设备是xxxhdpi时,图像文件的分辨率变小了 我不知道为什么会这样 例如: 我有两个设备,一个是xxhdpi,另一个是xxxhdpi 我有两个图像文件,一个放在“drawable xxhdpi”文件夹中,分辨率是1080x1920。另一个放在文件夹“drawable xxxhdpi”中,其分辨率为1440x2560

我遇到了一个问题:

我有不同大小的图像文件。(hdpi、xhdpi、xxhdpi、xxxhdpi)

当我在hdpi、xhdpi、xxhdpi设备中使用中的图像文件时,效果很好

但是当设备是xxxhdpi时,图像文件的分辨率变小了

我不知道为什么会这样

例如:

我有两个设备,一个是xxhdpi,另一个是xxxhdpi

我有两个图像文件,一个放在“drawable xxhdpi”文件夹中,分辨率是1080x1920。另一个放在文件夹“drawable xxxhdpi”中,其分辨率为1440x2560

当我阅读图像文件时,问题出现了

案例xxhdpi: 原始图片是1080x1920,读取的图像仍然是1080x1920

案例xxxhdpi: 原始图片为1440x2560,但读取的图像为1260x2240。

这是我的代码:

DisplayMetrics metrics = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
            Log.i("SettingCardFragment", String.format("%37s%dx%d",
                    "Screen resolution: ", metrics.widthPixels, metrics.heightPixels));

            Drawable drawable = ContextCompat.getDrawable(getActivity(),R.drawable.background);
            Log.i("SettingCardFragment", String.format("%37s%dx%d",
                    "(Drawable)Background.png resolution: ", drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()));

            Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background);
            Log.i("SettingCardFragment", String.format("%37s%dx%d",
                    "(Bitmap)Background.png resolution: ", bitmap.getWidth(), bitmap.getHeight()));
我使用代码检查读取的图片的分辨率

我在xxhdpi设备中得到了结果:

SettingCardFragment:                   Screen resolution: 1080x1776
SettingCardFragment: (Drawable)Background.png resolution: 1080x1920
SettingCardFragment:   (Bitmap)Background.png resolution: 1080x1920
以及xxxhdpi设备中的结果:

SettingCardFragment:                   Screen resolution: 1440x2392
SettingCardFragment: (Drawable)Background.png resolution: 1260x2240
SettingCardFragment:   (Bitmap)Background.png resolution: 1260x2240
为什么分辨率从1440x2560变为1260x2240

如果谁知道这个,请帮帮我~

Bitmap bitmap = BitmapFactory.decodeResource(getResources()
decodeResource将为您的设备调整resoluten


如果需要原始分辨率,请首先打开资源的
InputStream
,然后使用
BitmapFactory.decodeFromStream()
我想我已经解决了。您正在使用密度为3.5的设备(如Nexus 6p)。您可以使用以下代码检查密度
getResources().getDisplayMetrics().density
。在这类设备中,使用xxxhdpi,然后进行缩放

因此,如果我们进行缩放数学-
图像大小/xxxhdpi\u密度*设备密度
您将得到您看到的尺寸:

2560/4*3.5=2240

1440/4*3.5=1260


您好,我猜图像与屏幕的宽度和高度都匹配,对吗?您确定这是一个xxxhdpi设备,并且没有看到xxhdpi的放大版本吗?@X09为什么图像大小与屏幕匹配?我只是把它读入程序,我没有把它应用到任何视图中。@Jim,是的,对不起,你是对的。看起来有点奇怪。但是你确定图像的分辨率,对吗?@X09是的,我确定图片的分辨率是1440x2560,无论是从Windows还是从Android Studio的窗口。是的,你解决了我的问题,你让我知道大小是如何变化的。非常感谢你!