9

我正在处理大尺寸图像,当我尝试旋转它们(applying matrix on the bitmap)时会发生很多秒。我已经看到 android 系统库可以以非常快速的方式完成这项任务。这怎么可能?

我想在 asyncTask 上执行旋转,只在主线程上应用 ImageView 旋转(不需要很长时间),但是如果应用程序在 asyncTask 结束之前被杀死,应用程序就会处于不一致的状态.

这是我的位图旋转代码,对于大型位图需要很长时间执行:

Matrix mat = new Matrix();
mat.setRotate(90);
bMap = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true);
4

1 回答 1

4

在对大图像进行修改时,创建一个低质量的位图副本,并使用它来显示即时旋转或其他编辑效果。一旦用户停止运动(或左滑块控件),将低质量位图替换为具有相同效果的原始图像。这将显着改善用户体验。试着让我知道。

这听起来可能与原始要求有所不同——您可以绘制一个矩形而不是实时旋转整个图像。最后,用户需要的是他的图像旋转了多少的指示。这将更快,并且可以轻松地在 UI 线程上完成,而不会出现延迟。

这是画布代码上最简单的旋转

canvas.save(); //save the position of the canvas
canvas.rotate(angle, X + (imageW / 2), Y + (imageH / 2)); //rotate the canvas
canvas.drawBitmap(imageBmp, X, Y, null); //draw the image on the rotated canvas
canvas.restore();  // restore the canvas position.
于 2012-05-19T09:41:28.760 回答