- ベストアンサー
困っています!上手く機能しない画像判別プログラム
- 質問者は、画像を白黒判別し、カウントするプログラムを作成しましたが、上手く機能してくれません。
- 質問者は、プログラムについて助言を求めています。
- 助けが必要な箇所や気づいたことなど、どんな情報でも歓迎しています。
- みんなの回答 (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が黒色かどうかも怪しいです。
その他の回答 (1)
- chie65536
- ベストアンサー率41% (2512/6032)
>Bitmap.GetPixelの部分で どこかプログラムの初期化部分で Dim myBitmap As New Bitmap("file.bmp") って感じで、Bitmap型のグローバルオブジェクトを定義、作成して下さい(この例ではコンストラクタにファイル名を指定して、作成しつつファイルからロードしています) 後は、実際に使う部分で myBitmap.GetPixel(x,y) とか BmpWW = myBitmap.width BmpHH = myBitmap.height って感じで使います。
お礼
おー!!出来た。すげー!!ほんとありがとうございます。出来ました。大変わかりやすくて助かりました。また聞くことがあったらよろしくお願い致します。
お礼
大変解りやすい回答ありがとうございました。おかげさまで完成に大分近づくことが出来ました。もう一つお聞きしたいのですが、Bitmap.GetPixelの部分で、"非共有メンバを参照するには、オブジェクト参照が必要です"というエラーがでるのですが、よくわかりませんでした。よろしければ、教えてください。お願いします。