読み込んだ画像を白黒判別し、それぞれカウントするプログラムを作ったのですが、上手く機能してくれません。このプログラムについてどなたかわかる方、助言お願いします。間違っている箇所や気づいたこと等、何でもお願いします。
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
No.1ベストアンサー
- 回答日時:
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が黒色かどうかも怪しいです。
大変解りやすい回答ありがとうございました。おかげさまで完成に大分近づくことが出来ました。もう一つお聞きしたいのですが、Bitmap.GetPixelの部分で、"非共有メンバを参照するには、オブジェクト参照が必要です"というエラーがでるのですが、よくわかりませんでした。よろしければ、教えてください。お願いします。
No.2
- 回答日時:
>Bitmap.GetPixelの部分で
どこかプログラムの初期化部分で
Dim myBitmap As New Bitmap("file.bmp")
って感じで、Bitmap型のグローバルオブジェクトを定義、作成して下さい(この例ではコンストラクタにファイル名を指定して、作成しつつファイルからロードしています)
後は、実際に使う部分で
myBitmap.GetPixel(x,y)
とか
BmpWW = myBitmap.width
BmpHH = myBitmap.height
って感じで使います。
おー!!出来た。すげー!!ほんとありがとうございます。出来ました。大変わかりやすくて助かりました。また聞くことがあったらよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA
-
Webプログラムってネイティブア...
-
世界一美しいソースコード
-
コードプロテクトについて
-
VBAにてTIFFから画像を取込みた...
-
C言語→MATLABへの変換で、困っ...
-
画像がランダムに切り替わるwor...
-
マイコンからプログラムを読み...
-
プルダウメニューの項目をクリ...
-
遺伝的アルゴリズムのプログラ...
-
vba listviewにおけるtextのAli...
-
Arduino nano(アルドゥイーノ ...
-
AD変換ボードでオシロスコープ
-
USBカメラのTWAIN制御について
-
URLの最初の「h」を略す
-
VB6でシリアル通信サンプルソー...
-
C言語で1000までの素数を求める...
-
ubuntuでC++のGUIプログラム
-
c言語についてで、星占いをswit...
-
お掃除ロボットのソースコード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Webプログラムってネイティブア...
-
vba listviewにおけるtextのAli...
-
初級者の質問――time_tについて
-
VBA
-
COBOLのS9タイプからXタイプへ...
-
指定したフォルダーを最前面表...
-
マイコンからプログラムを読み...
-
2値化した画像の黒い部分のピク...
-
プロダクションコードとは?
-
Arduino nano(アルドゥイーノ ...
-
URLの最初の「h」を略す
-
VBコンソールアプリ(.NET Frame...
-
XPathの関数「text()="value"」...
-
世界一美しいソースコード
-
Excel VBA で、データベースフ...
-
三次元のグラフを書きたいので...
-
Visual Studio .NET C# でDLLを...
-
SH2を使いたいです
-
壁紙の変更
-
gccでスタックオーバーフローの...
おすすめ情報