- 題名: 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では
どうやって行うのでしょうか、教えて下さい。