1

私のアプリケーションでは、キャンバス オブジェクトの高さ = 90 px & 幅 = 86400 px (1 日の秒数を示す [60 * 60 * 24] )。キャンバスはスクロール可能で、ユーザーはその中のコンポーネントを追加または削除できます。

ここで、キャンバス全体のスナップショットを取得し、それをサイズ 910x30 に縮小して、別のキャンバスにスナップショットを描画したいと考えています。

このような大きなコンポーネントのスナップショットを撮る方法を誰か教えてもらえますか?

BitmapData オブジェクトでスナップショットを取得しようとしましたが、最大幅が 2880 であるため、キャンバス全体のスナップショットを取得できません。

もしそうなら、私に知らせてください。

提案は大歓迎です。

4

3 に答える 3

2

私はこれをテストしていませんが、BitmapDataをすべてまとめて却下し、クライアントコンピューターから直接結果を取得した場合はどうなりますか?このような:

var imgSnapshot:ImageSnapshot = ImageSnapshot.captureImage(savableCanvas,72,new PNGEncoder(),false);
            var bArray:ByteArray = imgSnapshot.data;

            var fileRef:FileReference = new FileReference();
            fileRef.save(bArray,"mySavedImage.png");

また、あなたの質問にタイプミスがありますか、86,400ピクセルは処理する必要のある大量のデータの地獄であり、おそらくサーバー側のコードとタイリング技術(Googleマップを考えてください)でこれを処理する必要があります...このようにphpを使用すると言う場合は、imagickを使用して、必要な動的に作成されたセクションをトリミングできます。それが8,640ピクセルだった場合、それは別の話です。GoogleCodeでBitmapDataUnlimitedを調べてください。そして心配しないでください、それは商業的に友好的です。ただし、コストがかかります。キャンバスの大部分は非常に適切に管理する必要があり、12k x 12kのbitmapDataオブジェクトは少なくとも1GBのメモリであると言われていることを考慮して、使用後すぐに破棄されます...

于 2009-11-06T19:20:04.930 に答える
0

大きなキャンバスの複数のスナップショットを撮り、縮小してからつなぎ合わせることができます。ただし、そのような大規模なコンポーネントのビットマップ キャプチャは、非常に集中的に行われます。

于 2009-11-06T16:49:10.573 に答える
0

また、キャンバスに scaleX/scaleY プロパティを設定して、910x30 サイズに収まるようにしてからスナップショットを実行することもできます。そうすれば、Flash はあなたに合わせて拡張できます。

于 2009-11-06T17:09:23.540 に答える