1

画像をファイルに変換するつもりはまだありません (これを行うかどうかもわかりません)。

描画は、カスタムメイドの描画プログラム (ユーザーが描画する場所) によって作成されます。アプリケーションのサイズを変更すると、再描画されていないため、描画が消えます。それは、イメージがまったく記憶されていないからです。アプリケーション全体がリフレッシュされた後に再描画できるように、描画を記憶するためのアルゴリズムが必要です。

私が考えた 1 つのアルゴリズムは、すべてのピクセルの位置と色を記憶することです。しかし、これは良い考えではないと思います。

現在 Java を使用していますが、言語に依存しないアルゴリズムが必要です。それでも、コードで説明された解決策を受け入れます。

図面全体を記憶するには、どのアルゴリズムを使用すればよいですか?

4

2 に答える 2

3

ユーザーのアクションを記憶することができます。たとえば、ユーザーが線を引く場合は、開始アドレスと終了アドレスを記憶します。彼女がハンズフリーで絵を描く場合は、単一のピクセルを記憶します (覚えなければなりません!)。

これにより、座標を操作するだけで、図面のサイズ変更、回転などを行うことができます。

「描画」はアクションのリストになります。

{
    LINE_DRAWING,
    x1, y1, x2, y2,
    pen, color, thickness...
}
{
    ...
}

再描画するには、同じリストをスキャンして、適切なサブルーチンを再度呼び出します。言語によっては、リストを配列、連結リスト、二重連結リストとして表現したり、要素の削除などを実装したりできます。

ファイルでは、ある種のタグ付き形式を提案します。

two bytes - element type
four bytes - this element's length
variable-size data depending on element type

繰り返しますが、図面を「ロード」するには、ファイルを順番にスキャンし、メモリ構造に入力します。

詳細とヒントについては、「ベクター描画」をグーグルで検索できます。

于 2012-11-25T16:40:58.717 に答える
2

多くのオプションがあります。1つは、あなたが言うように、画像のピクセルを覚えておくことです。また、図面を生成したすべてのユーザー アクションを記憶し、図面を再構築する必要があるときにそれらを再生することもできます。

別のアプローチは、描画プログラムがユーザーに提供するツールに応じて、画像のよりコンパクトな表現を構築することです。たとえば、描画プログラムが線を描画する機能しか提供していない場合、一連の線の端点 (および色、線の太さ、その他関連する線データ) を覚えておくことができます。これは、幾何学的プリミティブのより大きなセットに明白な方法で一般化されます。

フリーハンドで描画する場合は、その時点で設定されていたストローク設定とともに、ストローク パスを覚えておくことができます。プログラムが提供するストローク ツールの複雑さによっては、単に描画ピクセルを記憶するよりも多くのデータが必要になる場合があります。ただし、たとえば、キャンバスが拡大した場合に描画を拡大縮小することはできます。

于 2012-11-25T16:41:18.727 に答える