Какой самый эффективный способ сделать снимок экранного объекта в as3 - PullRequest
1 голос
/ 10 августа 2011

Какой самый эффективный способ сделать снимок экранного объекта в as3?

Это код, который я сейчас использую:

public static function img(o:DisplayObject,width:int,height:int):ByteArray
    {
        var b:BitmapData = new BitmapData(width,height,true,0x000000);
        b.draw(o,new Matrix(o.width/width,0,0,o.height/height),null,null,null,true);
        return new JPGEncoder(35).encode(b);
    }

Но это требует слишком много энергии процессора. Я в порядке, если он будет обрабатываться медленнее, но без загрузки процессора до 60%.

Спасибо.

1 Ответ

1 голос
/ 10 августа 2011

Это кодирование JPEG, которое занимает большую часть времени, а не захват объекта дисплея для BitmapData.

Для достижения лучшей производительности (жертвуя временем выполнения) вы должны использовать оптимизированную версию стандартного класса JPEGEncoder или / и его асинхронную версию.

Если вы не удовлетворены вышесказанным, попробуйте поискать похожие решения: некоторые ребята уже решили проблему.

Примечание: вы также можете реализовать несколько оптимизаций.

  • Вам не нужно каждый раз создавать новый экземпляр Matrix. Вы можете использовать один экземпляр, вызывая Matrix.identity() перед рисованием. Это будет полезно, если вы выполняете эту операцию много раз в течение одного сеанса приложения.
  • Вам не нужно каждый раз создавать новый экземпляр JPEGEncoder. Вы можете создать его и удерживать в каком-то закрытом статическом поле (например, создать его при первом вызове img()).
...