How to load a raw bitmap, without scaling on Android?

I have a bitmap file, that serves as a mask for a view. It has multiple rectangular areas with different colors on a white background. When the user touches the View, I use the X and Y coords of this event to look up the color of the mask (which is not displayed) and do things based on the color code returned.

The problem is: loading this mask with BitmapFactory results in a Bitmap object that is scaled. This way the colors get distorted a bit. If I have e.g. a solid rectangle with color (155, 155, 0), then it’ll be like (148, 158, 0), (150, 154, 0), and so on. But I need to get the exact color.

So how do I load the raw bitmap, without any scaling / compressing / stuff like that?


I did something similar, with a png file, which was stored in R.raw. The user clicked on an image, triggering the onTouch event of the colored image which was behind it.

public static Bitmap loadBitmapFromView(View v)
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    return b;

public boolean onTouch(View v, MotionEvent event)
    Bitmap b = loadBitmapFromView(v);
    long color = b.getPixel((int)event.getX(), (int)event.getY());
    //check what the color is, act accordingly 

Leave a Reply

Your email address will not be published. Required fields are marked *