VB.NET OverflowException при очень маленькой операции - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь объединить 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 без изменения результатов.

Я также попытался переключиться с оператора \ на / one, но все еще нетизменить.

Влияет ли тип переменных (color.A) на выполнение?

1 Ответ

0 голосов
/ 28 мая 2018

Как уже прокомментировал Ганс, если вы добавите два байта (например, 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)
...