VB.NET конвертировать байтовое число в 8 бит (256 цветов) RGB VALUE

Я прочитал эту ссылку Преобразование 8-битного цвета в значение RGB

Затем я попробовал код VB.NET, как показано ниже:

Private Sub picturebox1_MouseDown(ByVal sender As Object, _
                          ByVal e As System.Windows.Forms.MouseEventArgs) _
                          Handles picturebox1.MouseDown

    Dim bm As New Bitmap(picturebox1.Image)
    Dim Red As Byte = bm.GetPixel(e.X, e.Y).R
    Dim Green As Byte = bm.GetPixel(e.X, e.Y).G
    Dim Blue As Byte = bm.GetPixel(e.X, e.Y).B

    Dim ColorNumber As Byte = ((Red / 32) << 5) + ((Green / 32) << 2) + (Blue / 64)

    ' Show Byte Number of color
    MsgBox(ColorNumber)

    MsgBox(Red & ":" & Green & ":" & Blue)

    Red = (ColorNumber >> 5) * 32
    Green = ((ColorNumber >> 2) << 3) * 32
    Blue = (ColorNumber << 6) * 64

    MsgBox(Red & ":" & Green & ":" & Blue)


End Sub

Но когда выбран один пиксель, возникает ошибка:

Арифметическая операция привела к переполнению.

Как получить значение байта изображения с 256 цветами (8 бит), а затем восстановить результирующее значение байта (преобразование) в значение RGB.

Спасибо:)

1 ответ

Ваш ColorNumber был объявлен как Байт, который может хранить только значения от 0 до 255... Измените код на этот:

Dim ColorNumber As Int32 = ((Red / 32) << 5) + ((Green / 32) << 2) + (Blue / 64)

Кроме того, поскольку вы используете.Net, вы можете просто получить цвет с помощью этой функции:

Dim color As Color = Color.FromRgb(Red, Green, Blue)
Другие вопросы по тегам