- 題名: DrawMode = vbInvert機能
- 日時: 2004/07/13 18:00:19
- ID: 4830
- この記事の返信元:
- (なし)
- この記事への返信:
- [4842] Re[1]: DrawMode = vbInvert機能2004/07/13 23:33:15
- ツリーを表示
■No4865に返信(NINEさんの記事)
NINEさん、テラオメガさん、こんばんは。横槍失礼します。
私も DrawMode = vbInvert を使ったことがないので的外れかも知れませんけども
> 座標の反転ではなく色の反転描画です。
ということでしたら、 RGB 値を自分で計算すれば事足りるのではないでしょうか?
先の例に合わせるとこんな感じで。
# 直打ちしてるのでスペルミスがあるかも知れません。
Dim g As Graphics = CreateGraphics()
Dim c As Color = Color.Black
'黒で描画
g.DrawLine(New Pen(c), 0, 0, 1000, 1000)
'反転して白に
c = Color.FromArgb(c.ToArgb() Xor &HFFFFFF)
g.DrawLine(New Pen(c), 0, 0, 1000, 1000)
'更に反転して元の色に戻す
c = Color.FromArgb(c.ToArgb() Xor &HFFFFFF)
g.DrawLine(New Pen(c), 0, 0, 1000, 1000)
■No4869に返信(NINEさんの記事)
NINEさん、こんにちは。深山です。
> 私の例が手抜きで詳しく書いていなかったせいで
> 意図が伝わらなかったようで申し訳ありません。
> 最初の黒で書いている線は実際は色んな色が混ざっていて
> 判別できない状態と考えて下さい。
> 例えるとペイントで適当にお絵かきした画像で範囲選択
> を行った際に出る範囲の線をやりたいのです。
??? すいません、やっぱりよく解りませんでした(^_^;)
そこで VB6 で以下のようなコードを試したところ、ようやく意図してることが解りました。
背景色をそのまま反転させられるのですね!
Dim i As Integer
For i = 0 To 255
Line (0, i * 8)-Step(8 * 256, 8), RGB(i, i, i), BF
Next
DrawMode = vbInvert
Line (0, 0)-(8 * 256, 8 * 256)
どうなれば良いかはなんとなく解ったものの、 .NET ではどうすれば良いのか解らなかったので
vbInvert をキーワードにぐぐってみました。すると次のようなやり取りが。
http://www.dotnet247.com/247reference/msgs/39/198908.aspx
どうやら ControlPaint クラスの DrawReversibleLine メソッドを使えば同様のことが出来そうです。
試してみたところ、 VB6 で行ったのと同じ結果を得られました。
# 使用する際にはスクリーン座標への変換が必要になります。
NINEさんが実際にどのような処理をするのか解りませんので、用をなすかどうか定かでは
ありませんけども、これでどうでしょうか?
DrawReversibleFrame メソッドや FillReversibleRectangle メソッドといったものも
ありますし、応用は利くと思うのですが‥‥。
処理内容次第では、こちらの方が参考になるかも知れません。
http://www.vb-helper.com/howto_net_rubberband_line.html
分類:[.NET]
VB6での DrawMode = vbInvert での反転描画はVB.NETでは
どうやって行うのでしょうか、教えて下さい。