VB.NET 非常小的操作出现溢出异常
VB.NET OverflowException on very small operation
我正在尝试合并 2 种颜色,为此我创建了一个非常简单的函数:
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,结果没有任何变化。
我也试过从 \ 运算符切换到 / 运算符,但仍然没有任何变化。
变量的类型(color.A)会影响执行吗?
正如 Hans 已经评论过的那样,如果您添加两个字节(如 color1.A+color1.B
),您将得到一个最大值为 255 的字节。您必须将其转换为 Int32
,例如 CInt
。 Color.FromArgb
无论如何都需要 4 个整数。所以以下应该有效:
Dim a, r, g, b As Int32
a = (CInt(color1.A) + CInt(color2.A)) \ 2
r = (CInt(color1.R) + CInt(color2.R)) \ 2
g = (CInt(color1.G) + CInt(color2.G)) \ 2
b = (CInt(color1.B) + CInt(color2.B)) \ 2
Return Color.FromArgb(a, r, g, b)
我正在尝试合并 2 种颜色,为此我创建了一个非常简单的函数:
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,结果没有任何变化。
我也试过从 \ 运算符切换到 / 运算符,但仍然没有任何变化。
变量的类型(color.A)会影响执行吗?
正如 Hans 已经评论过的那样,如果您添加两个字节(如 color1.A+color1.B
),您将得到一个最大值为 255 的字节。您必须将其转换为 Int32
,例如 CInt
。 Color.FromArgb
无论如何都需要 4 个整数。所以以下应该有效:
Dim a, r, g, b As Int32
a = (CInt(color1.A) + CInt(color2.A)) \ 2
r = (CInt(color1.R) + CInt(color2.R)) \ 2
g = (CInt(color1.G) + CInt(color2.G)) \ 2
b = (CInt(color1.B) + CInt(color2.B)) \ 2
Return Color.FromArgb(a, r, g, b)