我有这个简单的功能:
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()函数无关
任何人都知道可能出现什么问题?我应该改变什么值,所以我可以旋转位图任何我需要的次数?
问候。
答案 0 :(得分:0)
拿一张纸,把手机放在上面(我假设它是矩形的),绘制一个完全包含手机的矩形。现在旋转它并再次绘制一个矩形 - 它更大,因为手机对角线比它的高度或宽度长。因此,当您的图像保持不变时,边界矩形会变大,位图也必须增长。