【问题标题】:bitmap rotation makes the image bigger each time is executed每次执行位图旋转都会使图像变大
【发布时间】:2013-05-31 21:25:55
【问题描述】:

我有这个简单的功能:

  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 内存不足。

我已经尝试过:

  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() 函数无关

有人知道可能是什么问题吗?我应该改变什么值,这样我就可以旋转位图任何我需要的次数?

问候。

【问题讨论】:

    标签: java android matrix bitmap


    【解决方案1】:

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

    【讨论】:

    • 我知道,但是尺寸几乎是原始图像的大小的两倍,在它周围添加了空白区域,这不是旋转对象时发生的比例增长。
    • 空格是你不断增长的边界矩形。如果您的线性尺寸增加 sqrt(2),则位图大小会加倍。
    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多