我正在尝试合并两种颜色,为此我创建了一个非常简单的功能:
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)是否会影响执行?
答案 0 :(得分:3)
正如Hans已经评论的那样,如果你添加两个字节(比如4*3*2*1 = 24
),你得到一个字节作为结果,其最大值为255.你必须把它转换为color1.A+color1.B
,例如与Int32
。 Color.FromArgb
无论如何都需要4个整数。以下应该有效:
CInt