我现在似乎找到了一些问题,举个例子:B = (Bayer(Column, Line - 1) + Bayer(Column, Line + 1)) \ 2,当Bayer(Column, Line - 1)与Bayer(Column, Line + 1)之和大于255的时候,就会提示有溢出,即使我R,G,B的变量都设为long型,太他妈的奇怪了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
当运算时算式的各变量都定义为Byte数据类型,内存则为运算结果开设8位来储存结果,当运算结果大于255必然报错. Private Sub Command1_Click() Dim a As Byte Dim b As Byte a = 120 b = 136 Print a + b '错误指向此行 End Sub
Private Sub Command1_Click() Dim a As Byte Dim b As Byte a = 120 b = 136 Print (a + b) / 2 '错误也指向此行 End Sub 所以别无它法,只能定义为Integer数据类型或Long数据类型
你可以把那些Byte类型的变量都换成Long类型的试一试。
从调试看,LZ应该定义Bayer(79, 79)数组为Integer数据类型,可以避免溢出错误.
Private Sub Command1_Click()
Dim a As Byte
Dim b As Byte
a = 120
b = 136
Print a + b '错误指向此行
End Sub
Dim a As Byte
Dim b As Byte
a = 120
b = 136
Print (a + b) / 2 '错误也指向此行
End Sub
所以别无它法,只能定义为Integer数据类型或Long数据类型
Byte + Byte=Byte
Byte + Integer=Integer
Byte + Long=Long
Byte + Double=Double
a、b都是Byte型,a+b的结果也是Byte型,所以当a+b的结果大于255的时候溢出那就是必然的,改成Print a+cint(b)就没事咯另外传说对于32位的电脑来说,对long型数据的处理速度是最快滴