Java 在android中旋转保存的位图

Java 在android中旋转保存的位图,java,android,bitmap,android-image,Java,Android,Bitmap,Android Image,我正在保存处于横向模式的相机的图像。所以它被保存在横向模式下,然后我在它上面应用了一个覆盖,它也在横向模式下。我想旋转该图像,然后保存。e、 如果我有这个 我想将其顺时针旋转90度一次,并将其保存到SD卡: 如何实现这一点?使用矩阵。旋转(度)并使用旋转矩阵将位图绘制到自己的画布上。我不知道你是否需要在绘图前复制位图 使用Bitmap.compress(…)将位图压缩为输出流。您可以使用画布API来完成此操作。请注意,您需要切换宽度和高度 void rotate(float x) {

我正在保存处于横向模式的相机的图像。所以它被保存在横向模式下,然后我在它上面应用了一个覆盖,它也在横向模式下。我想旋转该图像,然后保存。e、 如果我有这个

我想将其顺时针旋转90度一次,并将其保存到SD卡:

如何实现这一点?

使用矩阵。旋转(度)并使用旋转矩阵将位图绘制到自己的画布上。我不知道你是否需要在绘图前复制位图


使用Bitmap.compress(…)将位图压缩为输出流。

您可以使用画布API来完成此操作。请注意,您需要切换宽度和高度

void rotate(float x)
    {
        Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.tedd);

        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;

         Matrix matrix = new Matrix();

         matrix.postScale(scaleWidth, scaleHeight);
         matrix.postRotate(x);

         Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,width, height, matrix, true);

         iv.setScaleType(ScaleType.CENTER);
         iv.setImageBitmap(resizedBitmap);
    }
    final int width = landscapeBitmap.getWidth();
    final int height = landscapeBitmap.getHeight();
    Bitmap portraitBitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(portraitBitmap);
    c.rotate(90, height/2, width/2);
    c.drawBitmap(landscapeBitmap, 0,0,null);
    portraitBitmap.compress(CompressFormat.JPEG, 100, stream);
检查这个

public static Bitmap rotateImage(Bitmap src, float degree) 
{
        // create new matrix
        Matrix matrix = new Matrix();
        // setup rotation degree
        matrix.postRotate(degree);
        Bitmap bmp = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
        return bmp;
}

Singhak的解决方案很好。 如果需要调整结果位图的大小(可能对于ImageView),可以按如下方式展开该方法:

public static Bitmap rotateBitmapZoom(Bitmap bmOrg, float degree, float zoom){
    Matrix matrix = new Matrix();
    matrix.postRotate(degree);

    float newHeight = bmOrg.getHeight() * zoom;
    float newWidth  = bmOrg.getWidth() / 100 * (100.0f / bmOrg.getHeight() * newHeight);

    return Bitmap.createBitmap(bmOrg, 0, 0, (int)newWidth, (int)newHeight, matrix, true);
}

注意,还可以缩小新图像的比例:)