Сообщение об ошибке довольно ясно - вы звоните Color.FromArgb
, но вы даете ему "синее" значение -1, что недопустимо. Из документов:
синий
Тип: System.Int32
Синий
значение компонента для нового цвета.
Допустимые значения: от 0 до 255.
То, как вы это исправите, будет зависеть от того, что пытается сделать ваш код.
РЕДАКТИРОВАТЬ: Хорошо, теперь, когда вы разместили код, я сильно подозреваю, что он возвращает CLR_INVALID, который, как я предполагаю, - это битовый шаблон для -1 (то есть все биты установлены). Вы просто сдвигаете это, что расширяется до знака, поэтому вы все еще получаете -1.
Очень легко избежать этого, вызывая исключение - просто замаскируйте синее значение так же, как вы маскируете остальные:
return Color.FromArgb(color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF);
Тем не менее, это на самом деле просто собирается скрыть проблему - в итоге вы получите белый, где на самом деле у вас нет действительного значения. Возможно, вы должны проверить, если color == -1
и действовать соответствующим образом. Опять же, это точное поведение будет зависеть от вашего приложения.