2013-08-08 10 views
0

Я прочитал эту ссылку Converting 8 bit color into RGB valueVB.NET CONVERT BYTE NUMBER 8 бит (256 цветов) RGB VALUE

Затем я попробовал код 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

У вас есть более 8 бит цвета. – SLaks

+0

256 цветных изображений обычно хранятся с использованием палитры. Другими словами, 8-битное значение цвета не является комбинацией RGB, а просто индексом палитры для поиска реального RGB. Одних 8 бит недостаточно для хранения RGB. Это позволило бы только 2 бита на цвет, чего было бы недостаточно. Значение acutal RGB, сохраненное в палитре, будет больше 8 бит. –

+0

@SLaks Я использую изображения с 256-цветным BMP-форматом. Я редактирую, используя краску microsoft. –

ответ

1

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

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

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

Dim color As Color = Color.FromRgb(Red, Green, Blue) 
+0

Вот что я запутался, 256 цветов должны быть от 0 до 255 или равны 1 байту или 8 бит. Я хочу, чтобы образец кода извлекал значение цвета в байтах и ​​может быть применен обратно на картинке. любое решение? –

+1

Информация о цвете не может храниться в виде байта ... Да 256 цветов могут быть сохранены как значения от 0 до 255, но значения будут просто индексами для другого struture, содержащего реальную информацию о цвете (т.е. палитру). Пожалуйста, ознакомьтесь с [этот сайт] (http://paulbourke.net/dataformats/bitmaps/) для получения дополнительной информации. –