tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルPictureBoxの反転描画
記事No4837
投稿日: 2007/01/17(Wed) 21:20
投稿者Kazu
VB.NET 2003(.NET Framework 1.1)

PictureBox に文字を描画し、さらにその上に塗りつぶされた四角形を
描画した際に四角形と文字が重なった部分の文字色を反転させたいと
思っています。とりあえず、「FillReversibleRectangle」を使用して
文字色を反転させることはできたのですが、別ウィンドウの背面に隠し、
再度表示するなどの再描画を行うと塗りつぶされた四角形が消えてしま
います。消えないようにする方法はないものでしょうか。

[ツリー表示へ]
タイトルRe: PictureBoxの反転描画
記事No4838
投稿日: 2007/01/17(Wed) 21:26
投稿者花ちゃん
ここのTips集はご覧になられましたか?

[ツリー表示へ]
タイトルRe^2: PictureBoxの反転描画
記事No4842
投稿日: 2007/01/18(Thu) 11:25
投稿者Kazu
> ここのTips集はご覧になられましたか?

こちらのTips「PictureBox上で消える画像&描画・消えない画像&描画 (5個) 」
については参照させていただきました。

ただ今回使用した「DrawReversibleLineメソッド」は、PictureBox上ではなく
画面上に描画しているようで、上記で紹介されている方法での適用方法が分か
りませんでした。

VB6の時に、「.DrawMode = vbInvert」で行っていたことをVB.NETで実現
したいのですが、VB.NET初心者のためネットでいろいろ調べたのですが
分かりません。なにとぞご教授よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: PictureBoxの反転描画
記事No4843
投稿日: 2007/01/18(Thu) 12:01
投稿者花ちゃん
> こちらのTips「PictureBox上で消える画像&描画・消えない画像&描画 (5個) 」
> については参照させていただきました。
これを理解しない事には、今後も.NETで画像ファイルは加工できません。
あそこに書いてある事は、.NETで画像を扱う上での足し算・引き算のやり方のような
ものです。足し算・引き算を理解しておかないと計算式は書けませんよね。
サンプルを実際に色々試して理解して下さい。そのために違いなどが判るように
掲載しております。

下記サイトでも色々解説されているのでご覧になって実際試して見て下さい。
http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html
http://dobon.net/vb/dotnet/index.html#graphics

>ただ今回使用した「DrawReversibleLineメソッド」は、PictureBox上ではなく
だったら、PictureBox上なら消えないようにできるのですか?
描画した画像なりを、保存や印刷といった処理はできるのですか?
サンプルをよくご覧になって実際にご自分で試して確認して見て下さい。

> 画面上に描画しているようで、
ご自分で書いたコードではないのですか?

[ツリー表示へ]
タイトルRe^4: PictureBoxの反転描画
記事No4844
投稿日: 2007/01/18(Thu) 12:39
投稿者Kazu
もちろん、自分でサンプルプログラムを動かしながら
確認しています。こちらのTipsで紹介されている
g.DrawString、g.DrawLineあるいはg.FillRectangle等については
消えないことを確認しています。

今回悩んでいる「FillReversibleRectangle」については、下記のように
コーディングしていますが、PictureBoxのImageと紐つけられた「Graphics:g」
を使用していません。そのため、別ウインドーがかぶさると消えてしまうとい
うのは分かるのですが、PictureBoxと紐つける方法がまだ分からないでいます。
ControlPaint.FillReversibleRectangle(New Rectangle(startPoint, endPoint), Color.Black)

g.DrawString、g.DrawLineあるいはg.FillRectangleを使用して
反転色で描画しなおせば実現できると思うのですが、できれば
一発で反転できる「FillReversibleRectangle」を使用したいと考えています。

[ツリー表示へ]
タイトルRe^5: PictureBoxの反転描画
記事No4867
投稿日: 2007/01/21(Sun) 13:22
投稿者Kazu
> g.DrawString、g.DrawLineあるいはg.FillRectangleを使用して
> 反転色で描画しなおせば実現できると思うのですが、できれば
> 一発で反転できる「FillReversibleRectangle」を使用したいと考えています。

「FillReversibleRectangle」は、画面上に描画するため、意図した処理が
できず、あきらめました。
g.DrawString、g.DrawLineあるいはg.FillRectangleを使用して反転色を描画
することで対応するようにしました。自分なりにサンプルを作成しましたので
参照ください。「花ちゃん」さんの適切なアドバイスに感謝いたします。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim c As Color
        Dim g As Graphics
        Dim d As SolidBrush
        Dim f As New Font("MS Pゴシック", 14)

        '矩形、文字、ラインを描画

        With PictureBox1
            .Image = New Bitmap(100, 50)
            g = Graphics.FromImage(.Image)
        End With

        c = Color.Green
        d = New SolidBrush(c)
        g.FillRectangle(d, 0, 0, 100, 50)
        g.DrawString("花ちゃん", f, Brushes.Blue, 10, 10)
        g.DrawLine(Pens.Black, 0, 40, 100, 40)

        f.Dispose()
        g.Dispose()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim g As Graphics
        Dim c As Color
        Dim d As SolidBrush
        Dim f As New Font("MS Pゴシック", 14)

        'Button1で描画した内容を反転

        With PictureBox1
            .Image = New Bitmap(100, 50)
            g = Graphics.FromImage(.Image)
        End With

        c = Color.Green     '元の色
        c = Color.FromArgb(c.ToArgb() Xor &HFFFFFF) '色の反転
        d = New SolidBrush(c)
        g.FillRectangle(d, 0, 0, 100, 50)

        c = Color.Blue      '元の色
        c = Color.FromArgb(c.ToArgb() Xor &HFFFFFF) '色の反転
        d = New SolidBrush(c)
        g.DrawString("花ちゃん", f, d, 10, 10)

        c = Color.Black     '元の色
        c = Color.FromArgb(c.ToArgb() Xor &HFFFFFF) '色の反転
        g.DrawLine(New Pen(c, 1), 0, 40, 100, 40)

        f.Dispose()
        g.Dispose()

    End Sub

[ツリー表示へ]