プロが教えるわが家の防犯対策術!

読み込んだ画像を白黒判別し、それぞれカウントするプログラムを作ったのですが、上手く機能してくれません。このプログラムについてどなたかわかる方、助言お願いします。間違っている箇所や気づいたこと等、何でもお願いします。
Function CountNumColor(ByRef DotWW As Long, ByRef DotHH As Long, ByRef CHECK_C As Long) As Integer
 Dim Form1 As Object
Dim NumEQ As Double
Dim NumNot As Long
Dim x, y As Long
NumEQ = 0
NumNot = 0
System.Windows.Forms.Application.DoEvents()
For x = 0 To DotHH - 1
For y = 0 To DotWW - 1
System.Windows.Forms.Application.DoEvents()
If System.Drawing.Color.BlackToArgb() = Bitmap.GetPixel(x, y).ToArgb() Then
NumEQ = NumEQ + 1
Else
NumNot = NumNot + 1
Debug.Write("x,y,Val(Bitmap.GetPixel(x, y)")
End If
Next y
Next x
CountNumColor = NumEQ
End Function

A 回答 (2件)

If System.Drawing.Color.BlackToArgb() = Bitmap.GetPixel(x, y).ToArgb() Then



If System.Drawing.Color.Black.ToArgb() = Bitmap.GetPixel(x, y).ToArgb() Then
の間違いでは?

また、この行で、System.Drawing.Color.BlackのAプロパティとBitmap.GetPixel(x, y)のAプロパティが一致している保証はあるのでしょうか?
赤、青、緑の要素以外に、不透明度(Aプロパティ、アルファチャンネル)が一致していないと、ToArgb()メソットの返り値同士での色の一致は判定できません。

dim ChkColor As Color = Color.FromArgb(0)
の1行を宣言部に足し
If System.Drawing.Color.Black.ToArgb() = Bitmap.GetPixel(x, y).ToArgb() Then
の行を
ChkColor = Bitmap.GetPixel(x, y)
if ChkColor.R = 0 And ChkColor.G = 0 And ChkColor.B = 0 then
の2行に分けてみて下さい。

色を判定するたびにSystem.Drawing.Color.Blackプロパティを参照するのは処理の無駄ですし、まだKnownColor.Blackと書いた方がマシです。

もっと言えば、System.Drawing.Color.Blackが黒色かどうかも怪しいです。
    • good
    • 0
この回答へのお礼

大変解りやすい回答ありがとうございました。おかげさまで完成に大分近づくことが出来ました。もう一つお聞きしたいのですが、Bitmap.GetPixelの部分で、"非共有メンバを参照するには、オブジェクト参照が必要です"というエラーがでるのですが、よくわかりませんでした。よろしければ、教えてください。お願いします。

お礼日時:2005/11/22 15:32

>Bitmap.GetPixelの部分で



どこかプログラムの初期化部分で
Dim myBitmap As New Bitmap("file.bmp")
って感じで、Bitmap型のグローバルオブジェクトを定義、作成して下さい(この例ではコンストラクタにファイル名を指定して、作成しつつファイルからロードしています)

後は、実際に使う部分で
myBitmap.GetPixel(x,y)
とか
BmpWW = myBitmap.width
BmpHH = myBitmap.height
って感じで使います。
    • good
    • 0
この回答へのお礼

おー!!出来た。すげー!!ほんとありがとうございます。出来ました。大変わかりやすくて助かりました。また聞くことがあったらよろしくお願い致します。

お礼日時:2005/11/22 17:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!