Why Does BitmapFactory.decodeResource Scale My Image?
I have an image that is 120x120px located in my /res/drawable/ directory. This is the size required for all devices. To load this Bitmap, I am using the following: Bitmap tmpBmp =
Solution 1:
The default drawable
directory assumes that images need to be scaled from the default mdpi
size. Put your images in drawable-nodpi
if you want to disable resource scaling.
Do note that a 120x120px image, if displayed on the screen, will be 3x smaller on a xxhdpi device compared to a mdpi device (as there are three times as many pixels per inch).
Solution 2:
That's because the density of your screen and your image are different. Then if you do not specify Options
system will do it for you. At the source of BitmapFactory
you could see this:
public static Bitmap decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, Options opts) {
if (opts == null) {
opts = new Options();
}
if (opts.inDensity == 0 && value != null) {
final int density = value.density;
if (density == TypedValue.DENSITY_DEFAULT) {
opts.inDensity = DisplayMetrics.DENSITY_DEFAULT;
} else if (density != TypedValue.DENSITY_NONE) {
opts.inDensity = density;
}
}
if (opts.inTargetDensity == 0 && res != null) {
opts.inTargetDensity = res.getDisplayMetrics().densityDpi;
}
return decodeStream(is, pad, opts);
}
Therefore to prevent scaling you need to specify Options
param with inScaled=false
param. Or put your image to the res/drawable-nodpi
folder.
Post a Comment for "Why Does BitmapFactory.decodeResource Scale My Image?"