Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > RGB преобразовать в черно-белый


Автор: Sofist 11.9.2005, 20:15
Помогите!!! есть RGB код определенного цвета... Допустим его составляющие красный - R=58, зеленый - G=67, голубой - B=24 как его преобразовать в черно-белый??? С помощью каких арифметических действий??? Заранее благодарен.

Автор: Akina 11.9.2005, 20:44
.3*Red + .59*Green + .11*Blue

Однако это - формула 1) преобразования по эквиваленту яркости 2) она сильно зависит от настроек монитора.

Автор: super-vadim 11.9.2005, 22:11
Вроде бы это тебе нано. Функция возвращает ч/б цвет.
smile
Код
Private Declare Function ColorHLSToRGB Lib "Shlwapi.dll" (ByVal wHue As Integer, ByVal wLuminance As Integer, ByVal wSaturation As Integer) As Long
Private Declare Function ColorRGBToHLS Lib "Shlwapi.dll" (ByVal clrRGB As Long, pwHue As Integer, pwLuminance As Integer, pwSaturation As Integer) As Long

Private Function RGBToBlackWhite(ByVal ColorRGB As Long) As Long
    Dim ch As Integer
    Dim cl As Integer
    Dim cs As Integer
    dl = ColorRGBToHLS(ColorRGB, ch, cl, cs)
    RGBToBlackWhite = ColorHLSToRGB(160, cl, 0)
    'RGBToBlackWhite = RGBToBlackWhite Mod 256 'Если ч/б цвет нужно положить в 1 байт а не в 4-ре.
End Function

Private Sub Command1_Click()
    ColBW = RGBToBlackWhite(RGB(58, 67, 24))
End Sub


Автор: cardinal 11.9.2005, 22:14
Ищи в инете по слову dithering, если не найдешь помогу...

Автор: Gannibal 11.9.2005, 23:52
Конвертирование цветной картинки в черно-белую
Эта пример конвертирует цветную картинку в черно-белую с коэффицентами принятыми в телевидении.
На форме необходимо разместить кнопку и 2 PictureBox с именами pic1 и pic2 одинакового размера. Свойство ScaleMode у обоих надо выставить в 3-Pixel. В pic1 загрузите любое изображение и нажмите на кнопку.
--------------------------------------------------------------------------------
Код

Private Sub Command1_Click()
   Dim b1 As Byte, b2 As Byte, b3 As Byte
   Dim lColor&, x&, y&, Gray!

   pic2.Cls
   For x = 0 To pic1.ScaleWidth
      For y = 0 To pic1.ScaleHeight
         lColor = pic1.Point(x, y)
         b1 = lColor And &HFF 'Красный
         b2 = (lColor \ 256) And &HFF 'Зеленый
         b3 = (lColor \ 65536) And &HFF 'Синий
         Gray = b1 * 0.3 + b2 * 0.59 + b3 * 0.11
         lColor = RGB(Gray, Gray, Gray)
         pic2.PSet (x, y), lColor
      Next y
      DoEvents
   Next x
End Sub  


взято с http://vbnet.ru

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)