旋转大尺寸位图的最快方法

时间:2012-05-19 09:33:27

标签: android bitmap

我正在使用大尺寸图像,当我尝试旋转它们(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);

1 个答案:

答案 0 :(得分: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.