• ベストアンサー

ROP2での描画について

WinAPI(C言語)でペイントのようなアプリを作成しているのですが、 例えば、写真のような画像の上に任意の色で塗りつぶした四角形を描画し、 それを元の画像に戻す場合は、SetROP2関数は使用できないのでしょうか? 当初R2_NOTを指定すればいいと思っていたのですが、 これはR2_NOTで描画した画像の上にR2_NOTで描画すれば以前の画像に戻りますが、 白や黒の任意のブラシで塗りつぶした場合にそれを元の画像に戻す方法はありますか? ご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

変更前の画像を(必要な範囲だけ)保存しておいて、Undo時には以前の画像に戻す処理をするのが一般的じゃないでしょうか。 この方法では、大きな画像を繰り返し編集すると、保存するデータ量が多くなって消費メモリが増えるので、一時ファイルに書き出すとか、可逆圧縮処理をするといった工夫をしているソフトもあると思います。

scanfprintf
質問者

お礼

たびたびのご回答ありがとうございます。 確かにすべてのビットマップハンドルを保持しているとメモリが心配です・・・ 一時ファイルに書き出すのはできそうですが、可逆圧縮処理はなんか難しそうですね。

その他の回答 (1)

回答No.1

ありません。 R2_NOTの場合、塗りつぶすのではなく論理演算を使用して元の色から別の色に変換しています。この変換が逆変換可能なため、元に戻すことができます。 画像の一部を任意の色に変更してしまった場合は、元の色のデータがなくなってしまうため、元に戻すことはできません。

scanfprintf
質問者

お礼

早速のご回答ありがとうございます。 ちなみにこういった場合は、どのように実現させるのでしょうか? 例えば、UNDO機能を付ける場合は皆さんどのようにされているのでしょうか?

関連するQ&A