Android旋转位图90度会导致压缩的图像。需要在纵向和横向之间进行真正的旋转吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我正在尝试将位图图像旋转90度,以将其从横向格式更改为纵向格式。例:

[a,b,c,d] [e,f,g,h] [i,j,k,l]

顺时针旋转90度即可:

[i,e,a] [j,f,b] [k,g,c] [l,h,d]

使用下面的代码(来自在线示例)图像旋转了90度,但保留了横向宽高比,因此最终会出现垂直压扁的图像。难道我做错了什么?我需要使用另一种方法吗?如果更容易,我也愿意旋转我用来创建位图的jpeg文件:

 // create a matrix for the manipulation
 Matrix matrix = new Matrix();
 // resize the bit map
 matrix.postScale(scaleWidth, scaleHeight);
 // rotate the Bitmap
 matrix.postRotate(90);

 // recreate the new Bitmap
 Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, widthOriginal, heightOriginal, matrix, true); 
提问于
用户回答回答于

这是你如何正确旋转它的方法:

public static Bitmap rotate(Bitmap b, int degrees) {
    if (degrees != 0 && b != null) {
        Matrix m = new Matrix();

        m.setRotate(degrees, (float) b.getWidth() / 2, (float) b.getHeight() / 2);
        try {
            Bitmap b2 = Bitmap.createBitmap(
                    b, 0, 0, b.getWidth(), b.getHeight(), m, true);
            if (b != b2) {
                b.recycle();
                b = b2;
            }
        } catch (OutOfMemoryError ex) {
           throw ex;
        }
    }
    return b;
}
用户回答回答于

这是你需要旋转图像的全部内容:

Matrix matrix = new Matrix();
matrix.postRotate(90);
rotated = Bitmap.createBitmap(original, 0, 0, 
                              original.getWidth(), original.getHeight(), 
                              matrix, true);

扫码关注云+社区