Я нахожу, что DrawBitMap занимает 50-60 мс для рисования только трех растровых изображений, один из которых представляет собой прямоугольник, занимающий весь экран, один - круг, а другой - это Путь. Мои растровые изображения создаются с использованием Canvas.drawPath, drawRect и drawCircle на пустой растровой карте с Bitmap.Config как ARGB_8888. Я использую ARGB_8888, чтобы сделать фон видимым, чтобы получить эффект расслоения. Я был потрясен тем, что нашел время около 50 мс, поскольку я думал, что drawBitmap будет очень простой операцией. Может ли кто-нибудь объяснить, есть ли какая-то фундаментальная ошибка, которую я делаю. Ниже мой кодAndroid DrawBitMap очень медленный при использовании ARGB_8888
Создание пустых Bitmaps
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);
Рисование фигур на соответствующем BitMap
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 мс, но затем фон не отображается, и я получаю черный ящик вокруг пути.
Да, канал alpha используется, поскольку я хочу, чтобы фон правильно отображался вокруг изображения. И Да, цель состоит в том, чтобы делать поворот и масштабирование, поэтому я использую сглаживание. В основном я разрабатываю SVG-плеер, который делает анимацию векторной графики, поэтому битмап построен с использованием функций drawPath, а затем растровое изображение рисуется на экране для каждого кадра – 2010-12-07 10:41:51