android Matrix.postRotate()方法使图像大小更大

时间:2013-01-15 07:00:25

标签: android

OverlayObject overlayObject = overlayObjects.get(index);
Bitmap dotIndicator = overlayObject.DTO.dotIndicatorBitmap;

int width = dotIndicator.getWidth();
int height = dotIndicator.getHeight();

Log.d("dotIndicator.getWidth()", "" + width);
Log.d("dotIndicator.getHeight()", "" + height);

Matrix matrix = new Matrix();
matrix.postRotate(gbConstants.dotIndicatorRotationFactor, width/2, height/2);

Bitmap newBitmap = Bitmap.createBitmap(dotIndicator, 0, 0,
    width, width, matrix, true);

Log.d("newBitmap.getWidth()", "" + newBitmap.getWidth());
Log.d("newBitmap.getHeight()", "" + newBitmap.getHeight());

日志的结果:     01-15 14:46:16.485:D / dotIndicator.getWidth()(20739):102     01-15 14:46:16.485:D / dotIndicator.getHeight()(20739):102     01-15 14:46:16.485:D / newBitmap.getWidth()(20739):104     01-15 14:46:16.485:D / newBitmap.getHeight()(20739):104

01-15 14:46:16.555: D/dotIndicator.getWidth()(20739): 104
01-15 14:46:16.555: D/dotIndicator.getHeight()(20739): 104
01-15 14:46:16.555: D/newBitmap.getWidth()(20739): 106
01-15 14:46:16.555: D/newBitmap.getHeight()(20739): 106

**注意:gbConstants.dotIndicatorRotationFactor = 1(我把它设置为这个数字到调试的最低值)

每次旋转图像时,每次创建newBitmap时,都会在宽度和高度上添加2个像素。我浏览了其他链接和问题,但到目前为止还没有人回答我的问题。我也一遍又一遍地尝试调试,以确保没有其他方法可以引用会影响结果的变量和对象。提前谢谢!

2 个答案:

答案 0 :(得分:0)

答案很简单。 旋转1°的图像在宽度和高度上需要更多的空间。因此结果是完全正确的。因为否则图片的角落会被剪掉。

只需拿一张纸然后旋转它就会看到宽度和高度会增加,直到达到45°。

编辑:也许这有助于您:Image changes size as it's rotated. How do I stop this?

答案 1 :(得分:0)

这是因为如果您通过角度旋转图像,则生成的图像将是a 方形一个有你倾斜的图像。 如下图所示。

enter image description here