Dim bitmap As System.Drawing.Bitmap
Dim color As Color
Dim colortest() As Integer
Dim x, y As Integer
Dim rate As Double
Dim median_point As Double
Dim gattai As Double
bitmap = New Bitmap(CamImgPictureBox.Image)
For x = 1 To 320 Step 1
For y = 1 To 240 Step 1
color = bitmap.GetPixel(x, y)
Dim cr As Integer
Dim cg As Integer
Dim cb As Integer
cr = color.R
cg = color.G
cb = color.B
colortest(320 * x + y) = (cr + 100) * 1000000 + (cg + 100) * 1000 + cb + 100
Next y
Next x
gattai = LabCall1(rate, median_point, colortest)
上記のように、画像のそれぞれのrgbの値をcolortestの配列に9桁で表し、それをLabCall1の関数に送りたいのですが、最後の行のcolortestの部分で型 'Integer の 1 次元配列' の値を 'Integer' に変換できません。というエラーがおきてしまいます。
解決方法がどうしても分かりません。どなたかよろしくお願いします。
開発環境は必ず書きましょう、特に.NETの場合は。
>Dim colortest() As Integer
配列の大きさを宣言せずに使用できたっけ?
それは別として、受ける側の関数LabCall1がcolortestをIntegerの配列ではなくて、
単なるIntegerとして受けているだけでは。
LabCall1の宣言はどうなってるんですか。
Private Declare Auto Function LabCall1 Lib "C:\Documents and Settings¥CallCG1\Debug\CallCG1.dll" _
(ByVal rate As Double, ByVal median_point As Double, ByRef colortest As Integer) As Double
と宣言しています。
これでは配列として受けていないのでしょうか?
VBはじめたばかりでたいした知識もなくすみません。
横から失礼致します。
ByRef colortest As Integer
となっているとおりIntegerしか受け付けません。
配列だとInteger()となるかと思います。
KGさん、コメントありがとうございます。
Private Declare Auto Function LabCall1 Lib "C:\Documents and Settings¥CallCG1\Debug\CallCG1.dll" _
(ByVal rate As Double, ByVal median_point As Double, ByRef colortest As Integer) As Double
上記の As Integer をKGさんの言われた通り As Integer() にする事でエラーがなくなりました。
しかし目的となる実行結果が得られなかったので値の受け渡しが上手く行えていたのか心配です。いろいろ試行錯誤してみます。
.NETの場合Doubleは倍精度(64bit)浮動小数点数値。
-1.79769313486232e308 〜 1.79769313486232e308
と巨大な数字になりますが、その辺がおかしいのでは。
いずれにしろ、CallCG1.dllの LabCall1 を見ないと
なんとも。
ツイート | ![]() |