为什么程序读取图片文件后分辨率变小了?
Why do resolutions become smaller after a image file be read by program?
我遇到一个问题:
我有不同大小的图像文件。 (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?
哪位知道的请帮帮我~
Bitmap bitmap = BitmapFactory.decodeResource(getResources()
decodeResource 将为您的设备调整分辨率。
如果您想要原始分辨率,请先为资源打开 InputStream
,然后使用 BitmapFactory.decodeFromStream()
。
我想我明白了。您正在使用密度为 3.5 的设备(例如 Nexus 6p)。您可以使用此代码 getResources().getDisplayMetrics().density
检查密度。在这些设备中使用 xxxhdpi 然后缩放。
因此,如果我们进行缩放数学运算 - image_size / xxxhdpi_density * device_density
您将得到您所看到的尺寸:
2560 / 4 * 3.5 = 2240
1440 / 4 * 3.5 = 1260
我遇到一个问题:
我有不同大小的图像文件。 (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?
哪位知道的请帮帮我~
Bitmap bitmap = BitmapFactory.decodeResource(getResources()
decodeResource 将为您的设备调整分辨率。
如果您想要原始分辨率,请先为资源打开 InputStream
,然后使用 BitmapFactory.decodeFromStream()
。
我想我明白了。您正在使用密度为 3.5 的设备(例如 Nexus 6p)。您可以使用此代码 getResources().getDisplayMetrics().density
检查密度。在这些设备中使用 xxxhdpi 然后缩放。
因此,如果我们进行缩放数学运算 - image_size / xxxhdpi_density * device_density
您将得到您所看到的尺寸:
2560 / 4 * 3.5 = 2240
1440 / 4 * 3.5 = 1260