0

ac#パネルの背景画像に線を引いています。フォームのサイズが変更されると、パネルはフォームに固定され、パネルのサイズが変更されます。背景画像は引き伸ばされるように設定されているため、フォームのサイズを変更したときに表示されるのは背景画像だけです。

私の最初の問題:(OnPaintイベントを介して)パネルに描画された線は、画像のサイズが変更されても元の位置に留まります。

私の現在の解決策:線の位置を記録し、X座標とY座標をスケーリングして新しいビットマップに再描画します(正常に機能します)。

私の新しい問題:ウィンドウのサイズを変更して線を描画し続けると、線は元々異なるサイズの画像で描画されていたため、どの時点からもスケーリング係数を計算してすべての線に適用することはできません。

私が持っていると思う2つのオプション:線を再描画した後、線の配列を通過し、現在の縮尺と一致するように座標情報を更新します。または、線の座標情報を保存するだけでなく、描画時のパネルのサイズ情報も保存するので、線が描画されたときと新しいパネルサイズに基づいて各線のスケールを常に計算できます。

私が望んでいること:2つのアプローチのいずれかについて考えている場合は、非常に高く評価されます....これを行うためのはるかに優れた方法の方向に私を向けることがさらに良いでしょう(私はかなり新しいですC#でのグラフィック処理)。

4

1 に答える 1

0

思うようにコメントが書けません。いくつかのオプションがあります。

  • 元のビットマップに直接線を引きます。タスクによっては、これはオプションではない場合があります。

  • 今と同じように、線の座標を追跡し、サイズ変更時に更新し、ペイントで再描画します。これを使用すると、それらを移動および削除することもできます。

  • または、サイズ変更のたびに更新する「倍率」(float) を導入し、ペイント イベント ハンドラーでその倍率を使用してすべてを描画します。線を作成するときは、縮尺係数 BACK TO を使用して統一座標系 (縮尺係数 1) を使用して座標を計算します。その後、座標をまったく変更する必要はありません。これは、統一された座標系により、デバッグが容易になる場合があります。これは私が推奨するものですが、これもタスクによって異なります。

  • 元の画像と同じサイズの完全に透明なビットマップに描画し、前のオプションのような倍率を使用します。線を作成するときは、統一された座標系でその座標を計算し、それをビットマップに描画してから、すべてのペイントで元のビットマップの上にビットマップ全体を描画します。繰り返しますが、線を削除または移動する必要がある場合、またはメモリが不足している場合、または拡大したときに線がぼやけたくない場合は、これはオプションではないかもしれませんが、どういうわけか多くの人がこのようにしています「Photoshopのレイヤー」のようなものだからです。:)

于 2013-01-18T20:53:24.887 に答える