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

时间:2017-05-10 13:39:26

标签: android image screen drawable resolution

我遇到了一个问题:

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

当我在hdpi,xhdpi,xxhdpi设备中使用图像文件时,它很不错。

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

我不知道为什么会这样。

例如:

我有2个设备,其中一个是xxhdpi,另一个是xxxhdpi。

我有2个图像文件,一个放在文件夹中" 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?

如果谁知道这件事,请帮帮我〜

2 个答案:

答案 0 :(得分:0)

Bitmap bitmap = BitmapFactory.decodeResource(getResources()

decodeResource将为您的设备调整resoluten。

如果您需要原始分辨率,请先为资源打开InputStream,然后使用BitmapFactory.decodeFromStream()

答案 1 :(得分:0)

我想我明白了。您正在使用密度为3.5的设备(如Nexus 6p)。您可以使用此代码getResources().getDisplayMetrics().density检查密度。在这些设备中使用xxxhdpi然后进行缩放。

因此,如果我们进行缩放数学运算 - image_size / xxxhdpi_density * device_density,您将获得所看到的尺寸:

  

2560/4 * 3.5 = 2240

     

1440/4 * 3.5 = 1260