我正在尝试将位图图像旋转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);
发布于 2011-12-31 16:24:15
以下是旋转图像所需的全部内容:
Matrix matrix = new Matrix();
matrix.postRotate(90);
rotated = Bitmap.createBitmap(original, 0, 0,
original.getWidth(), original.getHeight(),
matrix, true);
在您的代码示例中,包含了对postScale的调用。这会不会是你的形象被拉长的原因?也许把它拿出来,再做一些测试。
发布于 2011-12-23 04:03:32
下面是如何正确地旋转它(这确保了图像的正确旋转)
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;
}
发布于 2013-01-23 16:19:03
这段代码对我来说非常好用:
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);
https://stackoverflow.com/questions/8608734
复制相似问题