views:

261

answers:

0

Given an image, I want to be able to scale only a part of that image. Say, I want to expand half of the image so that, that half takes up the whole space.

How is this possible?

Will ImageView fitXY work because I thought it'll work only for the whole original image.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this);

       Bitmap bitmap = BitmapFactory.decodeResource(getResources(),       R.drawable.icon);   


        int width = bitmap.getWidth();   

         int height = bitmap.getHeight();   

        int newWidth = 640;   

        int newHeight = 480;   


         float scaleWidth = ((float) newWidth) / width;   

        float scaleHeight = ((float) newHeight) / height;   


        Matrix matrix = new Matrix();   

        matrix.postScale(scaleWidth, scaleHeight);   

         // create the new Bitmap object   

         Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 50, 50, width,   

                 height, matrix, true);   

         BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);   



         ImageView imageView = new ImageView(this);   

         imageView.setImageDrawable(bmd);   

         imageView.setScaleType(ScaleType.CENTER);   



         linearLayout.addView(imageView, new LinearLayout.LayoutParams(   

                 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));   

         setContentView(linearLayout);   

} } This works only if in createBitmap, the X and Y coordinates of the first pixels in the source are 0. meaning, I'm not able to take a subset of the image. Only able to scale the whole image. But createBitmap is meant to subset an image.

In the log, when the parameters are not 0, I get the following exception: java.lang.IllegalArgumentException: x + width must be <= bitmap.width()

Please help