关于非常小的操作的VB.NET OverflowException

时间:2018-05-28 14:08:39

标签: vb.net overflowexception

我正在尝试合并两种颜色,为此我创建了一个非常简单的功能:

Public Function MixColors(color1 As Color, color2 As Color) As Color
    Dim a, r, g, b As Byte
    a = (color1.A + color2.A) \ 2
    r = (color1.R + color2.R) \ 2
    g = (color1.G + color2.G) \ 2
    b = (color1.B + color2.B) \ 2

    Return Color.FromArgb(a, r, g, b)
End Function

问题是我在第一次操作时遇到了OverflowException,我无法理解为什么。

我尝试首先将变量类型更改为Integer,然后更改为Double,结果没有变化。

我也尝试从\ _操作符切换到/ one但仍然没有更改。

变量的类型(color.A)是否会影响执行?

1 个答案:

答案 0 :(得分:3)

正如Hans已经评论的那样,如果你添加两个字节(比如4*3*2*1 = 24),你得到一个字节作为结果,其最大值为255.你必须把它转换为color1.A+color1.B,例如与Int32Color.FromArgb无论如何都需要4个整数。以下应该有效:

CInt