Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BitmapFactory returns bigger image than source

Hi i am creating a Bitmap from an png image named image.png. The image has the dimension 75 (width) x 92 (height). When I run this code:

Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(),  R.drawable.image
Log.d("image", "height: " + bitmap.getHeight() + " width: " + bitmap.getWidth());

the logger logs:

DEBUG/image(3550): height: 138 width: 113

and the image on the screen is bigger than other images which have the dimension 75 x 92. What can I do to make android load the image with the right dimension?

like image 803
Franziskus Karsunke Avatar asked Sep 09 '11 15:09

Franziskus Karsunke


3 Answers

My solution:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;               
Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(),  R.drawable.image, options );
like image 126
phusung Avatar answered Nov 14 '22 19:11

phusung


It sounds like your screen density on your device is different than the density where image.png was created.

If you really want to prevent the scaling, you could try one of the following:

  1. Put the image in res/drawable-nodpi (http://developer.android.com/guide/practices/screens_support.html#qualifiers)

  2. Use ImageView.ScaleType.CENTER (http://developer.android.com/reference/android/widget/ImageView.ScaleType.html)

  3. Just found this related question on SO: Android: How to stop Android 1.6+ from scaling images

like image 12
Ben Jakuben Avatar answered Nov 14 '22 20:11

Ben Jakuben


Beause loader in BitmapFactory applies screen density scaling during loading. To override this, provide own desired inTargetDensity in BitmapFactory.Options in call to decodeResource.

like image 4
Pointer Null Avatar answered Nov 14 '22 21:11

Pointer Null