我正在处理大尺寸图像,当我尝试旋转它们(applying matrix on the bitmap)
时会发生很多秒.我已经看到android系统库可以以非常快的方式完成这项任务.这怎么可能?
我想在asyncTask上执行旋转,只在主线程上应用ImageView旋转(这不需要很长时间),但如果在asyncTask结束之前应用程序被杀死,则app会处于不一致状态.
这是我的位图旋转代码,需要长时间执行大位图:
Matrix mat = new Matrix();
mat.setRotate(90);
bMap = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true);
Run Code Online (Sandbox Code Playgroud)
对大图像进行修改时,创建其低质量位图副本并使用它来显示即时旋转或其他编辑效果。一旦用户停止运动(或左滑块控制),用应用了相同效果的原始图像替换低质量位图。这将显着改善用户体验。尝试让我知道。
这听起来可能与最初的要求有偏差——您可以绘制一个矩形,而不是实时旋转整个图像。最后,用户需要的是他的图像旋转了多少的指示。这会更快,并且可以在 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.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3169 次 |
最近记录: |