0

I have this

 Bitmap appWidgetBitmap = Bitmap.createBitmap(availableWidth, availableHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(appWidgetBitmap); 

And in the log console I see this

"dalvikvm-heap Grow heap (frag case) to......byte allocation 

How can I make Bitmap with the lowest resources possible?
I saw something on BitmapFactory, but how to do it because the code above is createBitmap, not from resources.

1

1 Answer 1

1

Use below methods for resizing the image as aspect ratio:

public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int halfHeight = height / 2; final int halfWidth = width / 2; // Calculate the largest inSampleSize value that is a power of 2 and // keeps both // height and width larger than the requested height and width. while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) { inSampleSize *= 2; } } return inSampleSize; } public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res, resId, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; // BitmapFactory.decodeResource(res, resId, options); return Bitmap.createScaledBitmap( BitmapFactory.decodeResource(res, resId, options), reqWidth, reqHeight, true); } 

Then decode your image into bitmap format and set into the Canvas:

 Bitmap src = decodeSampledBitmapFromResource(getResources(), R.drawable.ic_bg_box, imgWidth, imgHeight); Canvas canvas = new Canvas(src); 

I hope this will help you.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks. Should be this way.
Hi, anyway I don't have the resource. You see my code is only create a bitmap then put it into Canvas. But your code is to decode Bitmap from a resource.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.