how to rotate a bitmap 90 degrees

后端 未结 10 1574
离开以前
离开以前 2020-11-28 03:09

There is a statement in android canvas.drawBitmap(visiblePage, 0, 0, paint);

When I add canvas.rotate(90), there is no effect. But if I wri

相关标签:
10条回答
  • 2020-11-28 03:47

    You can also try this one

    Matrix matrix = new Matrix();
    
    matrix.postRotate(90);
    
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapOrg, width, height, true);
    
    Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true);
    

    Then you can use the rotated image to set in your imageview through

    imageView.setImageBitmap(rotatedBitmap);
    
    0 讨论(0)
  • 2020-11-28 03:48

    By default the rotation point is the Canvas's (0,0) point, and my guess is that you may want to rotate it around the center. I did that:

    protected void renderImage(Canvas canvas)
    {
        Rect dest,drawRect ;
    
        drawRect = new Rect(0,0, mImage.getWidth(), mImage.getHeight());
        dest = new Rect((int) (canvas.getWidth() / 2 - mImage.getWidth() * mImageResize / 2), // left
                        (int) (canvas.getHeight()/ 2 - mImage.getHeight()* mImageResize / 2), // top
                        (int) (canvas.getWidth() / 2 + mImage.getWidth() * mImageResize / 2), //right
                        (int) (canvas.getWidth() / 2 + mImage.getHeight()* mImageResize / 2));// bottom
    
        if(!mRotate) {
            canvas.drawBitmap(mImage, drawRect, dest, null);
        } else {
            canvas.save(Canvas.MATRIX_SAVE_FLAG); //Saving the canvas and later restoring it so only this image will be rotated.
            canvas.rotate(90,canvas.getWidth() / 2, canvas.getHeight()/ 2);
            canvas.drawBitmap(mImage, drawRect, dest, null);
            canvas.restore();
        }
    }
    
    0 讨论(0)
  • 2020-11-28 03:54

    In case your goal is to have a rotated image in an imageView or file you can use Exif to achieve that. The support library now offers that: https://android-developers.googleblog.com/2016/12/introducing-the-exifinterface-support-library.html

    Below is its usage but to achieve your goal you have to check the library api documentation for that. I just wanted to give a hint that rotating the bitmap isn't always the best way.

    Uri uri; // the URI you've received from the other app
    InputStream in;
    try {
      in = getContentResolver().openInputStream(uri);
      ExifInterface exifInterface = new ExifInterface(in);
      // Now you can extract any Exif tag you want
      // Assuming the image is a JPEG or supported raw format
    } catch (IOException e) {
      // Handle any errors
    } finally {
      if (in != null) {
        try {
          in.close();
        } catch (IOException ignored) {}
      }
    }
    
    int rotation = 0;
    int orientation = exifInterface.getAttributeInt(
        ExifInterface.TAG_ORIENTATION,
        ExifInterface.ORIENTATION_NORMAL);
    switch (orientation) {
      case ExifInterface.ORIENTATION_ROTATE_90:
        rotation = 90;
        break;
      case ExifInterface.ORIENTATION_ROTATE_180:
        rotation = 180;
        break;
      case ExifInterface.ORIENTATION_ROTATE_270:
        rotation = 270;
        break;
    }
    

    dependency

    compile "com.android.support:exifinterface:25.1.0"

    0 讨论(0)
  • 2020-11-28 03:57

    Below is the code to rotate or re size your image in android

    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.width();
            int height = bitmapOrg.height();
            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,
                              width, height, 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);
        }
    }
    

    You can also check this link for details : http://www.anddev.org/resize_and_rotate_image_-_example-t621.html

    0 讨论(0)
提交回复
热议问题