Android DrawBitMap 使用 ARGB_8888 时非常慢

2024-03-10

我发现 DrawBitMap 只绘制三个位图需要 50-60 毫秒,一个是占据整个屏幕的矩形,一个是圆形,另一个是路径。我的位图是通过在空白位图上使用 Canvas.drawPath、drawRect 和 drawCircle 创建的,Bitmap.Config 为 ARGB_8888。 我使用 ARGB_8888 使背景可见以获得分层效果。 我很惊讶地发现花费了大约 50 毫秒的时间,因为我认为 drawBitmap 将是一个非常简单的操作。有人可以指导我是否犯了任何根本性错误。以下是我的代码

创建空白位图

Rectangle = Bitmap.createBitmap(320,480,Bitmap.Config.ARGB_8888);
Circle = Bitmap.createBitmap(70,70,Bitmap.Config.ARGB_8888);
Leaf1 = Bitmap.createBitmap(20,30,Bitmap.Config.ARGB_8888);

在适当的位图上绘制形状

Canvas c = new  Canvas(Rectangle);
Paint p = new Paint();
p.setAntiAlias(true);
p.setColor(0xff6e8b3e);
c.drawRect(0,0,320,480,p);

Canvas c = new Canvas(Circle);
Paint p = new Paint();
CirclePath = new Path();
p.setAntiAlias(true);
p.setColor(0xffcd661d);
System.out.println("x = "+x+" y = "+y);
CirclePath.addCircle(50,50,10,Path.Direction.CW);
c.drawPath(CirclePath,p);

Canvas c = new  Canvas(Leaf1);
Paint paint = new Paint();
Path path = new Path();
paint.setAntiAlias(true);
path.moveTo((float)184.37,(float)219.15);
path.cubicTo((float)188.32,(float)219.15,(float)192.88,(float)220.44,(float)195.62,(float)223.54);
path.cubicTo((float)197.84,(float)226.05,(float)203.2,(float)229.84,(float)198.18,(float)245.98);

在 OnDraw 中绘制位图

canvas.drawBitmap(Rectangle,0,0,p);
canvas.translate(x,y); // For animation effect
canvas.drawBitmap(Circle,0,0,p);
canvas.drawBitmap(Leaf1,0,0,p);

现在,当我记录这三个 drawBitMap 所花费的时间时,我发现它花费了大约 50 毫秒 代码中是否存在重大错误。将 Bitmap.Config 更改为 RGB_565 可以将时间缩短至 8 毫秒左右,但背景不可见,路径周围出现黑框


看起来很正常。 Canvas 的透明度非常慢。

您可以尝试切换到 OpenGL ES 或以尽可能低的透明度设计内容,以便您可以尽可能频繁地使用 RGB_565。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android DrawBitMap 使用 ARGB_8888 时非常慢 的相关文章

随机推荐