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

ビットマップのRGB値をテキストボックスに表示させるには

環境/言語:[環境(Win2000)、言語(VB.NET)]
分類:[.NET]

あけましておめでとうございます。
初めて書き込みさせていただきますが、よろしくお願いいたします。

ビットマップ(20x20)からRGB、例えばRedはFF、Greenは00、BlueはFFという感じで
テキストボックスに表示させたいのです。
検索してみると、どれもAPIを使用していたため全く理解できません(;;
ビットマップだとAPIを使用しなくても出来るという書き込みがあったため
自分なりにプログラムを組んでみましたがうまくいきません。

Dim myFileName As String = "ファイル名"
Dim bmp As New Bitmap(FileName)
bmp.GetPixel(0, 0) 'ここでTextBoxやMessageBoxに表示させようとするが
             '波線がついてしまう

説明不足かもしれませんが、どなたかご教授願います。
■No14348に返信(もにさんの記事)
> bmp.GetPixel(0, 0) 'ここでTextBoxやMessageBoxに表示させようとするが
>              '波線がついてしまう

戻り値の型を見れば理由がわかります。


_________________________________________________________________________
じゃんぬ Microsoft MVP for Visual Developer - C#
  http://jeanne.wankuma.com/
  http://blogs.wankuma.com/jeanne/
> 戻り値の型を見れば理由がわかります。

じゃんぬねっと様、返信ありがとうございます。

Me.TextBox1.Text = bmp.GetPixel(0, 0).ToString

で表示することができました。

ついでと言ってはなんですが・・・
For文を使用し、次のピクセルカラー値を取得しようとしました。

For y = 0 To 19
For x = 0 To 19
Me.TextBox1.Text = bmp.GetPixel(x, y).ToString
Next x
Next y

として実行してみたのですが、
Me.TextBox1.Text = bmp.GetPixel(x, y).ToString
の部分で、「使用されたパラメータが無効です。」という例外が出てしまいました。
なぜこうなってしまうのか理解できません(;;

教えていただけないでしょうか?><
■No14350に返信(もにさんの記事)
> Me.TextBox1.Text = bmp.GetPixel(0, 0).ToString
> で表示することができました。

一応別解も載せておきますね。

    Dim hBitmap As New System.Drawing.Bitmap("D:\MakiMakiLove.bmp")
    Dim hColor  As System.Drawing.Color = hBitmap.GetPixel(0, 0)

    MessageBox.Show(hColor.R.ToString("X"))
    MessageBox.Show(hColor.G.ToString("X"))
    MessageBox.Show(hColor.B.ToString("X"))

> Me.TextBox1.Text = bmp.GetPixel(x, y).ToString
> の部分で、「使用されたパラメータが無効です。」という例外が出てしまいました。

厳密には GetPixel メソッドの部分で起きているんでしょうね。
こういう場合は、先の別解のようにバラすと原因が絞れます。

> なぜこうなってしまうのか理解できません(;;

「使用されたパラメータが無効」と、例外の詳細にありますよね?
では、その時に使用したパラメータは有効であるかどうかは検証されたのでしょうか?

もう少し、頑張ってみてください。


_________________________________________________________________________
じゃんぬ Microsoft MVP for Visual Developer - C#
  http://jeanne.wankuma.com/
  http://blogs.wankuma.com/jeanne/
じゃんぬねっと様、またまた素早い回答ありがとうございます。(^^
別解のほうもいただき、感謝しています。

> では、その時に使用したパラメータは有効であるかどうかは検証されたのでしょうか?
・・・大変恥ずかしい間違いがありました(^^;

先ほどの書き込みでは、

For y = 0 To 19
For x = 0 To 19

と表記しましたが・・・
自分で組んだプログラムを見てみると

For y = 0 To 20
For x = 0 To 20

となっていました。
読み込ませているビットマップは20x20なのに、
x座標、y座標共に0〜20まで指定していたら駄目ですよね。(^^;
大変申し訳ないです。m(_ _)m

おかげさまで解決することができました。
じゃんぬねっと様、大変助かりました。ありがとうございます!

また初歩的な質問をしてしまうかもしれませんが、よろしくお願いいたします。
解決済み!
連レスすみません。
そしてもう1つ・・・
教えていただいたことを、プログラム上で全く使っていないという・・・
本当にすみません。m(_ _)m

最終的なプログラムとしては

Dim x, y As Integer
Dim myColor As Color
Dim myFileName As String = "ファイル名"
Dim bmp As New Bitmap(myFileName)
For y = 0 To 19
For x = 0 To 19
myColor = bmp.GetPixel(x, y)
If myColor.R = 255 And myColor.G = 255 And myColor.B = 255 Then
TextBox1.Text &= "White" & vbLf
ElseIf myColor.R = 255 And myColor.G = 255 And myColor.B = 255 Then
TextBox1.Text &= "Black" & vbLf
Else
TextBox1.Text &= "Another color" & vbLf
End If
Next x
Next y
※ここでのインデントの仕方がわからなくて見づらくなってしまって申し訳ありません

という感じです。
For文のところだけですかね。(^^;

1つ勉強になった、ということでご勘弁を。。。
あう・・・
チェック忘れ。(^^;
解決済み!

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