配列を別の関数に送る方法


イノ  2007-10-11 00:53:07  No: 137746

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' に変換できません。というエラーがおきてしまいます。
解決方法がどうしても分かりません。どなたかよろしくお願いします。


我龍院  2007-10-11 20:35:12  No: 137747

開発環境は必ず書きましょう、特に.NETの場合は。
>Dim colortest() As Integer
配列の大きさを宣言せずに使用できたっけ?

それは別として、受ける側の関数LabCall1がcolortestをIntegerの配列ではなくて、
単なるIntegerとして受けているだけでは。
LabCall1の宣言はどうなってるんですか。


イノ  2007-10-12 23:36:22  No: 137748

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はじめたばかりでたいした知識もなくすみません。


KG  2007-10-13 00:11:47  No: 137749

横から失礼致します。

ByRef colortest As Integer

となっているとおりIntegerしか受け付けません。
配列だとInteger()となるかと思います。


イノ  2007-10-13 00:42:59  No: 137750

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()  にする事でエラーがなくなりました。

しかし目的となる実行結果が得られなかったので値の受け渡しが上手く行えていたのか心配です。いろいろ試行錯誤してみます。


我龍院  2007-10-13 02:24:54  No: 137751

.NETの場合Doubleは倍精度(64bit)浮動小数点数値。
-1.79769313486232e308 〜 1.79769313486232e308
と巨大な数字になりますが、その辺がおかしいのでは。
いずれにしろ、CallCG1.dllの LabCall1 を見ないと
なんとも。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加