Scale & rotate Bitmap using Matrix in Android

前端 未结 8 1733
名媛妹妹
名媛妹妹 2020-12-12 19:26

I\'m trying to scale and rotate in single operation before creting the final bitmap but the preRotate, postConcat doesn\'t seem to work.

Bitmap bmp = ... ori         


        
8条回答
  •  情歌与酒
    2020-12-12 19:52

    This is the code

    public class Bitmaptest extends Activity {
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            LinearLayout linLayout = new LinearLayout(this);
    
            // load the origial BitMap (500 x 500 px)
            Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
                   R.drawable.android);
    
            int width = bitmapOrg.getWidth();
            int height = bitmapOrg.getHeight();
            int newWidth = 200;
            int newHeight = 200;
    
            // calculate the scale - in this case = 0.4f
            float scaleWidth = ((float) newWidth) / width;
            float scaleHeight = ((float) newHeight) / height;
    
            // createa matrix for the manipulation
            Matrix matrix = new Matrix();
            // resize the bit map
            matrix.postScale(scaleWidth, scaleHeight);
            // rotate the Bitmap
            matrix.postRotate(45);
    
            // recreate the new Bitmap
            Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
                              newWidth, newHeight, matrix, true);
    
            // make a Drawable from Bitmap to allow to set the BitMap
            // to the ImageView, ImageButton or what ever
            BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
    
            ImageView imageView = new ImageView(this);
    
            // set the Drawable on the ImageView
            imageView.setImageDrawable(bmd);
    
            // center the Image
            imageView.setScaleType(ScaleType.CENTER);
    
            // add ImageView to the Layout
            linLayout.addView(imageView,
                    new LinearLayout.LayoutParams(
                          LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT
                    )
            );
    
            // set LinearLayout as ContentView
            setContentView(linLayout);
        }
    }
    

提交回复
热议问题