DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DrawStringで描画した文字の座標の色

環境/言語:[環境(XP),使用言語(VB.NET)]
分類:[.NET]

DrawStringで描画した文字の座標位置の色を取得したのですが…
GetPixelを使用して取得しようとしているのですがうまく取得できません。
取得すると、全て黒になってしまいます。

どうしたら、取得できるのでしょうか?
よろしくお願いします。
■No3182に返信(みきさんの記事)
> DrawStringで描画した文字の座標位置の色を取得したのですが…
> GetPixelを使用して取得しようとしているのですがうまく取得できません。
> 取得すると、全て黒になってしまいます。

今はどうやってるんでしょう?
ソースコードがないと何ともいえないと思います。
そうですよね…すいません。

Dim Pen As New SolidBrush(Color.Black)
Dim g As Graphics = Graphics.FromImage(PictureBox2.Image)
g.DrawString("VisualBasic.Net", myFont, Pen, 10, 10)
Dim Bmp1 As Bitmap
Bmp1 = New Bitmap(CType(PictureBox2.Image, Bitmap))
Dim Color As Color
Dim Color1 As Color
Color1 = Color.FromArgb(0, 0, 0)

For X = 0 To Bmp1.Width - 1
For Y = 0 To Bmp1.Height - 1
Color = Bmp1.GetPixel(X, Y)
If Color.R = Color1.R And Color.G = Color1.G And Color.B = Color1.B Then

と、こんな感じにしています。
描画された座標位置が取得したいのですが。
2004/03/21(Sun) 10:38:51 編集(投稿者)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PictureBox1.Image = New Bitmap(PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myFont As Font = Me.Font
Dim Pen As New SolidBrush(Color.Black)
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
g.Clear(PictureBox1.BackColor) ' 変更点
g.DrawString("VisualBasic.Net", myFont, Pen, 10, 10)
Dim Bmp1 As Bitmap
Bmp1 = New Bitmap(CType(PictureBox1.Image, Bitmap))
Dim tempColor As Color
Dim Color1 As Color
Color1 = Color.FromArgb(0, 0, 0)

For X As Integer = 0 To Bmp1.Width - 1
For Y As Integer = 0 To Bmp1.Height - 1
tempColor = Bmp1.GetPixel(X, Y)
If tempColor.R = Color1.R And tempColor.G = Color1.G And tempColor.B = Color1.B Then
Debug.WriteLine(CStr(X) & ":" & CStr(Y))
End If
Next
Next
End Sub

提示のサンプルコードを元にこちらの環境に合わせて一部変更したソースです。
Formの上にPictureBox1、Button1を配置して実験してみました。

もし、PictureBoxのImageプロパティに設定しているBitmapオブジェクトが
空のBitmapオブジェクトであるとすると、一度GraphicsクラスのClearメソッドを使用するなどして背景色を設定する必要があるようです。

Bitmapオブジェクトの設定はどうされていますか?
---------
■修正(正確なコードでなかったので下記のミスを修正)
PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)

PictureBox1.Image = New Bitmap(PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height)
よねKENさん、ありがとうございますm(__)m

Bitmapオブジェクトは
Dim bmp As New Bitmap(PictureBox2.ClientSize.Width,PictureBox2.ClientSize.Height)
PictureBox2.Image = bmp
と、しています。

Clearメソッドを追加したら、ちゃんと取得してくれるようになりました(^^)
本当に助かりました。ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板