本帖最后由 bcrun 于 2010-11-21 12:15:47 编辑

解决方案 »

  1.   

    就是在Bayer to RGB那个函数里发生的错误,并且每次溢出的语句都不一样!!!!!!!!
      

  2.   

    我已经在LS说过了,错误就是在BayerToRGB24(Column As Integer, Line As Integer)这个函数里,但是每次错误的语句不一样,有时候是在“处理图像的四个顶点”的if中提示错误,有时候是在“常规处理”的if中产生溢出错误!!!!!!
      

  3.   

    估计是你的数据类型使用错误,范围不够,你单步调试一下,看看问题到底出在那一句?就你的代码而言,我们凭空是很难做出判断的。
    你可以把那些Byte类型的变量都换成Long类型的试一试。
      

  4.   

    单独执行LZ的Command3_Click来调用BayerToRGB24函数n次都没出现LZ所说的错误.LZ应该贴出串口通信的全部代码.
    从调试看,LZ应该定义Bayer(79, 79)数组为Integer数据类型,可以避免溢出错误.
      

  5.   

    我现在似乎找到了一些问题,举个例子:B = (Bayer(Column, Line - 1) + Bayer(Column, Line + 1)) \ 2,当Bayer(Column, Line - 1)与Bayer(Column, Line + 1)之和大于255的时候,就会提示有溢出,即使我R,G,B的变量都设为long型,太他妈的奇怪了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  6.   

    Bayer(79,79)所得到的数据全部都是在255以下,这点我能确定,因为我的单片机才8位,不会超过255的。
      

  7.   

    我把Bayer(79,79)改成integer后确实可以了,真奇怪,按理说byte型也不会溢出啊!!!!!
      

  8.   

    当运算时算式的各变量都定义为Byte数据类型,内存则为运算结果开设8位来储存结果,当运算结果大于255必然报错.
    Private Sub Command1_Click()
        Dim a As Byte
        Dim b As Byte
        a = 120
        b = 136
        Print a + b '错误指向此行
    End Sub
      

  9.   

    Private Sub Command1_Click()
        Dim a As Byte
        Dim b As Byte
        a = 120
        b = 136
        Print (a + b) / 2 '错误也指向此行
    End Sub
    所以别无它法,只能定义为Integer数据类型或Long数据类型
      

  10.   

    基本常识:
    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型数据的处理速度是最快滴
      

  11.   

    本帖最后由 bcrun 于 2010-11-21 12:16:05 编辑