1

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);
    }

ただし、CPUパワーがかかりすぎます。処理速度が遅くても問題ありませんが、CPU使用率は最大60%です。

ありがとう。

4

1 に答える 1

1

ほとんどの時間がかかるのはJPEGエンコーディングであり、表示オブジェクトをBitmapDataにキャプチャすることはありません。

パフォーマンスを向上させる(実行時間を犠牲にする)には、標準のJPEGEncoderクラスの最適化されたバージョンまたはその非同期バージョンを使用する必要があります。

上記に満足できない場合は、同様の解決策をグーグルで試してみてください。そこにいる何人かの人はすでに問題を解決しています。

注:いくつかの最適化を実装することもできます。

  • 毎回新しいMatrixインスタンスを作成する必要はありません。Matrix.identity()描画する前に呼び出して、1つのインスタンスを使用できます。これは、1回のアプリケーションセッション中にこの操作を何度も実行する場合に役立ちます。
  • 毎回新しいJPEGEncoderインスタンスを作成する必要はありません。1つ作成して、プライベート静的フィールドに保持できます(たとえば、への最初の呼び出しで作成しますimg())。
于 2011-08-10T08:33:57.577 に答える