问题
I meet a problem:
I have images file having different sizes. (hdpi, xhdpi, xxhdpi, xxxhdpi)
When I used the image files in the in the hdpi,xhdpi,xxhdpi devices, it's good.
But when the device is xxxhdpi, the resolutions of the image files was became smaller.
I don't know why it had happened.
For example:
I have 2 devices, one's resolution is xxhdpi, another one is xxxhdpi.
And I have 2 image files, one is put in the folder "drawable-xxhdpi", it's resolution is 1080x1920. Another one is put in the folder "drawable-xxxhdpi", it's resolution is 1440x2560.
When I read the image files, problem was appeared.
The case xxhdpi: The original picture is 1080x1920, and image that was read is 1080x1920 still.
The case xxxhdpi: The original picture is 1440x2560, but the image that was read became 1260x2240.
This is my code:
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()));
I use the code to check the resolution of the picture that was read.
And I got the result in xxhdpi device:
SettingCardFragment: Screen resolution: 1080x1776
SettingCardFragment: (Drawable)Background.png resolution: 1080x1920
SettingCardFragment: (Bitmap)Background.png resolution: 1080x1920
And the result in xxxhdpi device:
SettingCardFragment: Screen resolution: 1440x2392
SettingCardFragment: (Drawable)Background.png resolution: 1260x2240
SettingCardFragment: (Bitmap)Background.png resolution: 1260x2240
Why did the resolution became 1260x2240 from 1440x2560?
If who know this, help me please~
回答1:
I think I figured it out. You are using a device with density 3.5 (like the Nexus 6p). You can check the density with this code getResources().getDisplayMetrics().density. In these kind of devices xxxhdpi is used and then scaled.
So if we do the scaling math - image_size / xxxhdpi_density * device_density you get the dimensions you are seeing:
2560 / 4 * 3.5 = 2240
1440 / 4 * 3.5 = 1260
回答2:
Bitmap bitmap = BitmapFactory.decodeResource(getResources()
decodeResource will adapt the resoluten for your device.
If you want the original resolution then first open an InputStream for the resource and then use BitmapFactory.decodeFromStream().
来源:https://stackoverflow.com/questions/43894183/why-do-resolutions-become-smaller-after-a-image-file-be-read-by-program