首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android将位图旋转90度会导致图像被压缩。需要在肖像和风景之间进行真正的旋转

Android将位图旋转90度会导致图像被压缩。需要在肖像和风景之间进行真正的旋转
EN

Stack Overflow用户
提问于 2011-12-23 03:20:58
回答 4查看 27.1K关注 0票数 18

我正在尝试将位图图像旋转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文件,如果这样更容易的话。

代码语言:javascript
复制
 // 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); 
EN

回答 4

Stack Overflow用户

发布于 2011-12-31 16:24:15

以下是旋转图像所需的全部内容:

代码语言:javascript
复制
Matrix matrix = new Matrix();
matrix.postRotate(90);
rotated = Bitmap.createBitmap(original, 0, 0, 
                              original.getWidth(), original.getHeight(), 
                              matrix, true);

在您的代码示例中,包含了对postScale的调用。这会不会是你的形象被拉长的原因?也许把它拿出来,再做一些测试。

票数 41
EN

Stack Overflow用户

发布于 2011-12-23 04:03:32

下面是如何正确地旋转它(这确保了图像的正确旋转)

代码语言:javascript
复制
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;
}
票数 13
EN

Stack Overflow用户

发布于 2013-01-23 16:19:03

这段代码对我来说非常好用:

代码语言:javascript
复制
                Matrix matrix = new Matrix();

            matrix.setRotate(90, 0, 0);
            matrix.postTranslate(original.getHeight(), 0);

            rotatedBitmap = Bitmap.createBitmap(newWidth, newHeight, original.getConfig());
            Canvas tmpCanvas = new Canvas(rotatedBitmap);
            tmpCanvas.drawBitmap(original, matrix, null);
            tmpCanvas.setBitmap(null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8608734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档