Simple question where the simple answer isn’t working. I have a bitmap and I want to get its dimensions as scaled to the display by the system for different DPI screens within the onDraw() method. bitmap.width() returns its unscaled width successfully. However, bitmap.getScaledWidth() returns zero. I have tried getScaledWidth(canvas) and getScaledWidth(canvas.getDensity()), but both return 0. Indeed, canvas.getDensity() returns zero so I can’t even calculate it manually.
What am I doing wrong?
Bit more detail. I’m using a custom view. The bitmap is declared in the class and loaded in the constructor.
Edit:
I’ve found that using:
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
bitmap.getScaledHeight(metrics) returns the same value as bitmap.getHeight().
It would appear that bitmap.getWidth() returns the dimension of the resident bitmap after it has been scaled, meaning there’s no apparent way to get the bitmap’s original width.
The Canvas class has a lots of overloads for the drawBitmap() function. One of them allows you to scale/cut a Bitmap through a pretty comfortable interface.
public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)Where
cut out a piece from your bitmap (in the size and position of src)
fit in.
And now an example! Lets say, you want to shrink your Bitmaps width to 1/2 and increase its height to 2 times of the original:
UPDATE
I don’t really understand, what you are trying to acomplish, after reading your comment, but here is some extra info to get started:
Get the original size of a Bitmap without loading it into the memory:
Now if you have another your actual (scaled)
Bitmap, or anImageView, what you want to compare to the original, then you can use this (to get the width and height usegetWidth()andgetHeight()):