2012-08-02 53 views
1

此代码总是通过算术溢出异常。怎么了 ?简单的一些函数返回“溢出异常”

Function ChannelSum(ByVal C As System.Drawing.Color) As Integer 
    Dim temp As Integer : temp = (C.R + C.G + C.B) 
    Return temp 
End Function 

... 

Dim x, y, R, G, B, a As Integer : Dim tmp As Color 
bmp = New Bitmap(picBox.Tag.ToString) 
xMax = bmp.Width - 1 : yMax = bmp.Height - 1 
For x = 0 To xMax Step 1 
    For y = 0 To yMax Step 1 
     tmp = bmp.GetPixel(x, y) : a = ChannelSum(tmp) 
    Next y 
Next x 

第一次遇到循环会中断!

+0

在哪一行循环中断? – 2012-08-02 14:50:40

+0

第一次遇到循环会中断!当X和Y为0时,但调试器显示X,Y已通过xMax,yMax。我已经复制了所有的代码。 – Sourav 2012-08-02 14:52:10

+0

我敢打赌,你的C.R,C.G,c.B没有像你期望的那样返回一个整数。也许你会需要在每一个这样做。 – Yosem 2012-08-02 14:54:01

回答

3

C.R和其他字节字段,并且只能保存最大值为255的值。将字节字段加在一起会产生大于255的数字。首先在每个颜色元素上使用CInt()。

temp = (CInt(C.R) + CInt(C.G) + CInt(C.B)) 
+0

**您可以接受4中的答案分钟**,等待4分钟。Thnx :) – Sourav 2012-08-02 14:58:01

+0

@Holger Brandt。非常奇怪,我想它会检测到结果被分配给一个Integer变量。 – 2012-08-02 15:00:18

+2

@Trekstuff,实际上,它总是首先评估等式右边的表达式,然后获取结果并尝试将其转换为变量的数据类型。否则像'Dim tmp As String = 2 + 3'这样的东西可能会显示为“23”而不是“5”。 – 2012-08-02 15:06:00