位图旋转使每次执行时图像都变大

时间:2013-05-31 21:25:56

标签: java android matrix bitmap

我有这个简单的功能:

  private Bitmap rotateImg(Bitmap b){       
    Matrix bMat = new Matrix();
    bMat.preRotate(30, b.getWidth()/2, b.getHeight()/2);
    return Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), bMat,false);
}

并执行如下:

    currentStateImg = rotateImg(currentStateImg);

由于某种原因,它第一次运行时效果很好,但每次执行时,它都会旋转位图,但也会使图像变大(在它周围留下空白),直到VM耗尽内存。 / p>

我已经尝试过:

  postRotate
  preRotate
  setRotate
  setting the last element of createBitmap (filter) to true/false
  returning a copy of the resulted bitmap from createBitmap so i could apply the config Config.ARGB_8888

奇怪的是,我也试过这段代码:

 RectF r = new RectF(0,0,b.getWidth(),b.getHeight());
 bMat.mapRect(r);

并且在第二次运行中,矩阵计算(r.width()和r.height()的值)每次执行时都返回更大的图像大小,因此似乎是矩阵值的问题与createBitmap()函数无关

任何人都知道可能出现什么问题?我应该改变什么值,所以我可以旋转位图任何我需要的次数?

问候。

1 个答案:

答案 0 :(得分:0)

拿一张纸,把手机放在上面(我假设它是矩形的),绘制一个完全包含手机的矩形。现在旋转它并再次绘制一个矩形 - 它更大,因为手机对角线比它的高度或宽度长。因此,当您的图像保持不变时,边界矩形会变大,位图也必须增长。