1

私はwxWidgetsで、たとえばMSペイントと同様の機能を持つプログラムを作成していますが、より具体的な目的のためです。

マウスをドラッグすると1つのピクセルをコミットする鉛筆/鉛筆オブジェクトを作成するさまざまな方法を理解しています。視覚化に問題があるのは、他の一般的なツールのいくつかです。長方形、楕円形、線などです。これらの場合、マウスの左ボタンを押して原点を設定し、マウスをドラッグして一時的にレンダリングします。原点から現在のマウス位置までのキャンバス上の形状のオーバーレイ。最後に、マウスボタンを離したときに形状を画像にコミットします。

このプロセスを作成するための最良の方法は何ですか?私が考えることができる唯一の解決策は、原点をマウスダウンに保存し、マウスをドラッグして一時変数を現在のマウス位置に設定することです。マウスの位置が変わるたびに、原点から保存されているマウスの位置までの長方形が無効になります。マウスボタンを離すと、形状が画像モデルにコミットされます。

最初にフィードバックが欲しいので、これはまだ実装していません。これは最適な解決策ですか、それともはるかに好ましい解決策が利用可能で、目に見えるちらつきを引き起こす傾向がありますか?

4

2 に答える 2

2

ビデオディスプレイハードウェアは非常に高速になっているので、そのような巧妙さを気にする必要はないでしょう。

これがより簡単なアプローチです

-*マウスはボタンを押したまま移動し、ツールXを選択します*
-IF flagToolInUse THENは、画像モデルから前の画像を削除します
--flagToolInUse = TRUE
-ツールXで画像モデルを更新します
-非表示のバッファに画像を描画します
-バッファをコピーして表示します
- 終わり

-*ボタンがリリースされました*
--flagToolInUse = FALSE
- 終わり

これの本当の利点は、使用しているツールに関係なく、コードを1回記述すれば、画像へのすべての変更に使用できることです。

wxWidgetsを使用してちらつきのないダブルバッファ表示を実装する方法の詳細が必要な場合は、ここに紹介があります(主にウィンドウ)

于 2011-05-07T15:38:32.817 に答える
1

FloatCanvasでどのようにそれを行うかを確認することをお勧めします。これはwxPython用ですが、「プレーンな」wxWidgetsを使用している場合でもいくつかのアイデアが得られるはずです。

于 2011-05-07T15:25:58.153 に答える