我遇到了一个问题:
我有不同大小的图像文件。 (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?
如果谁知道这件事,请帮帮我〜
答案 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