1

Java swing で落書き型のアプリを開発しています。それは初歩的な段階にあり、ここに示されています。

フリーハンド ボード

最後に描いたストロークを元に戻す元に戻す機能を実装しました。元に戻す機能は、定義された最大の元に戻すレベルまで実行できます。

元に戻す機能は、Image array. この配列はFirst-In-Last-Outスタックのように機能します。元に戻すをクリックすると、スタックがpoped あり、取得した画像が画面に描画されます。

現在私が直面している問題は、元に戻すの現在の実装方法があまりにも多くのメモリを消費することです。取り消しレベル 20 では、ほぼ 70 ~ 80 MB のメモリが使用され、レベル 30 ではヒープ オーバーフローが発生します。

元に戻す機能を実装するより良い方法はありますか? ありがとう。

編集:ここで役立つ情報をいくつか見つけました。

4

1 に答える 1

2

図面内のステップを別の方法で表現する必要があります。あなたが使用している現在のアプローチでは、キャンバスを毎回新たに非圧縮の画像として保存します。これはメモリを貪欲にします。

キャンバスに描画されているストロークのみがスタックに保存されるように、コードをリファクタリングしてみてください。これにより、画像をレンダリングするときにオーバーヘッドが少し増えますが (変更が発生するたびにキャンバス全体を再描画する必要があります)、Java はそれを処理するように設計されています。

形状のみを保存したので、メモリ要件は大幅に減少するはずです。このクラスを使用しShapeて、キャンバス上のストロークを表現します。

于 2012-12-20T07:32:32.750 に答える