Xorモード指定字のCanvas描画の色指定

解決


Yama  2007-06-15 05:52:23  No: 26667

Canvasにラインを描く際、Xorを指定して背景を汚さずに書きたい場合の
色指定について教えてください。

    Pen.Color:=clBlue;
    Pen.Style:=psSolid;
    Pen.Mode :=pmXor;
    Pen.Width:=PenWidth;

上記のように指定すると、Xorで画面の背景色とclBlueの色の関係で
実際の色が変わってしまいます。  この場合、実際に描く色を
例えば、Blueにしたい場合は、色の指定をどのようにすると
よいのでしょうか。  よろしくお願いします。


アナタ次第  2007-06-15 06:33:48  No: 26668

>...Xorで画面の背景色とclBlueの色の関係で
>実際の色が変わってしまいます...

XORとは、そういうもの。どんな色を指定しても描かれる色は
背景色次第で変ってしまう。
逆にいえば背景色が分からなければ指定する色も分からない。


Yama  2007-06-15 08:00:22  No: 26669

背景色は、自作アプリなので当然わかっています。
わかっている背景色と描きたい色との関係性というか
指定方法を知りたいと思いました。

例えば、背景色が、clLtGrayで、CanvasにclBlueで
Canvasに描きたい場合は、Pen.Colorにこの2色から
計算して指定方法がありそうに思います。


ウォレス  2007-06-15 17:37:10  No: 26670

「描きたい色S」と「背景色B」とのxorをとったものが「求める色X」になります。

S^B=X  のとき
X^B=S  となります。

・・余計分かりにくいですね。
要するにある数Sにある数Bをxorしたとして、その数Xにもう一度BをxorするとSに戻ります。

しかし、質問とはずれちゃいますが、何故xorを使うのか不明です。
ソリッドに好きな色を使って描けばよいのではないですか?


TS  2007-06-15 17:47:08  No: 26671

あやふやで済みませんが
Xorは線消去用に使用していたと思いますが。

1  線を普通に引く
2  その同じ色でXorで線を引く

これで1の線が消去される


蛇に青い足を描く  2007-06-15 18:20:26  No: 26672

答えは既に出ているが...
Pen.Color := Brush.Color xor clBlue;


ウォレス  2007-06-15 18:56:24  No: 26673

プログラムする以前に、
恐らく発言者自身が矛盾に気づいていないものと思われます。

1.clBlueで線を描きたい。
2.線の上に背景の「感じ」を残したい。

この2つは相反しています。
どちらかの制約をなくす、若しくは緩めなければなりません。

発言者の意図を汲むなら、1.の制限を緩めるべきですが、どのように緩めるのかは発言者自身しか規定できません。


3K  2007-06-15 20:32:01  No: 26674

Canvas上にマウス移動にともなってLineを引きたい時にPen.Mode :=pmXorを
使用せざるおえなくて、私も前に苦戦した覚えが。
>>Pen.Color := Brush.Color xor clBlue;
おお、こんなに簡単な方法があったとは。感謝。


えーと  2007-06-15 23:01:49  No: 26675

>>Pen.Color := Brush.Color xor clBlue;

しかし、質問者もそうですが、背景色が予め分かっているなら Xor モードを
使う意味なんかまったく無いですね。たんに青い線を引いて、消すときは背景色
で上書きするだけですから。

Xor モードは背景色が一様でないときに威力を発揮するんでは?


Yama  2007-06-16 00:53:07  No: 26676

みなさん、情報ありがとうございます。

Pen.Color := Brush.Color xor clBlue;

これでドンピシャリでした。Bit演算で確認でもと思いましたが、
楽をして質問しました。

蛇足ですが、

>しかし、質問者もそうですが、背景色が予め分かっているなら
> Xor モードを使う意味なんかまったく無いですね。
>たんに青い線を引いて、消すときは背景色で上書きするだけですから。

これはうまくいきません。  画面には背景の上にいろいろな図面などが
あると、NGです。  Xorの出番なのです。

解決しました。  感謝です。


Yama  2007-06-16 01:00:33  No: 26677

解決ボタン忘れ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加