цвет пикселя

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Skarobey
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 01.06.2002 (Сб) 17:34
Откуда: Russia

цвет пикселя

Сообщение Skarobey » 21.08.2005 (Вс) 20:51

беру цвет в точке, как мне узнать оттенок?
например точного цвета нет, но идут оттенки красного, и черного(серого)... как отследить это изменение? может какая таблица цветов есть?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.08.2005 (Вс) 21:04

Еще раз. Как нет точного цвета? Получаешь же 3 байта: R,G,B.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 21.08.2005 (Вс) 21:28

Такое ощущение, что у чела неправильное представление о представлении цвета в компе :)
Нет меня больше

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.08.2005 (Вс) 21:31

Чел. Это правда!? Как ты мог? :)

Skarobey
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 01.06.2002 (Сб) 17:34
Откуда: Russia

Re: цвет пикселя

Сообщение Skarobey » 21.08.2005 (Вс) 23:13

получаю цвет 5922138
мне надо определить входит ли он в диапазон красного... или желтое или черное и т.д. ... причем этот цвет не стабилен в данной точке... т.е. он может быть разный... и мне надо проверять когда он станет зеленого или другого цвета, т.е. if х=5922138 тут не катит, т.к. вэтой точке может 5922139 и уже невыйдет...

вот я и спрашиваю, мож какая функция или таблица есть?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.08.2005 (Вс) 23:32

Код: Выделить всё
Public Sub GetRGB(ByVal Color As Long, Red As Byte, Green As Byte, Blue As Byte)
    Dim c As Long
   
    c = (Color And &HFF&)
    Red = CByte(c)
   
    c = ((Color And &HFF00&) / &H100&)
    Green = CByte(c)
   
    c = ((Color And &HFF0000) / &H10000)
    Blue = CByte(c)     
End Sub


Использование:

Код: Выделить всё
Dim R as Byte, G as Byte, B as Byte

GetRGB 5922138,R,G,B

Msgbox R & " " & G & " " &  B


На выходе получаешь 90 93 90.
Первое 90 - это значит, что в пикселе доля красного - 90/255.
Второе - что доля зеленого 93/255.
Третье - что доля синего 90/255.

Исходя из этого и анализируй оттенок.[/code]

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 22.08.2005 (Пн) 0:12

Ну... Таблицу найти сложновато, проще самому написать :roll:
Кинь на форму кнопку
Код: Выделить всё
Private Sub CommandButton_Click()
Dim Color&, R&, G&, B&, S$, Flags(5) As Boolean
Color = CLng(InputBox("Введите цвет"))
R = Color And &HFF&
G = (Color And &HFF00&) / &H100&
B = (Color And &HFF0000) / &H10000
Me.BackColor = Color
If (Abs(R - G) <= 20 Or Abs(G - B) <= 20 Or Abs(R - B) <= 20) And _
   (R / G) < 1.5 And (R / B) < 1.5 And (G / B) < 1.5 And (G / R) < 1.5 And (B / R) < 1.5 And (B / G) < 1.5 Then S = S & "Оттенок серого" & vbCrLf
If (R / G) > 1.625 And (R / B) > 1.625 Then S = S & "Оттенок красного" & vbCrLf: Flags(0) = True
If (R / G) < 1.625 And (R / B) > 1.625 Then S = S & "Оттенок желтого" & vbCrLf: Flags(1) = True
If (R / G) > 1.625 And (R / B) < 1.625 Then S = S & "Оттенок фиолетового" & vbCrLf: Flags(2) = True
If (G / R) > 1.625 And (G / B) > 1.625 Then S = S & "Оттенок зеленого" & vbCrLf: Flags(3) = True
If (G / R) > 1.625 And (G / B) < 1.625 Then S = S & "Оттенок цвета морской волны" & vbCrLf: Flags(4) = True
If (B / R) > 1.625 And (B / G) > 1.625 Then S = S & "Оттенок синего" & vbCrLf: Flags(5) = True
If (R / G) > 1.425 And (R / B) > 1.425 And Not Flags(0) Then S = S & "Возможно, оттенок красного" & vbCrLf
If (R / G) < 1.425 And (R / B) > 1.425 And Not Flags(1) Then S = S & "Возможно, оттенок желтого" & vbCrLf
If (R / G) > 1.425 And (R / B) < 1.425 And Not Flags(2) Then S = S & "Возможно, оттенок фиолетового" & vbCrLf
If (G / R) > 1.425 And (G / B) > 1.425 And Not Flags(3) Then S = S & "Возможно, оттенок зеленого" & vbCrLf
If (G / R) > 1.425 And (G / B) < 1.425 And Not Flags(4) Then S = S & "Возможно, оттенок цвета морской волны" & vbCrLf
If (B / R) > 1.425 And (B / G) > 1.425 And Not Flags(5) Then S = S & "Возможно, оттенок синего" & vbCrLf
MsgBox Color & vbCrLf & S
End Sub
Способ ламерский, накатан как макрос в ворде за 2 минуты. Но вроде работает :roll:
Последний раз редактировалось A.A.Z. 22.08.2005 (Пн) 0:35, всего редактировалось 2 раз(а).
Нет меня больше

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 22.08.2005 (Пн) 0:13

Гм, если бы опера обновила страницу, я бы не стал писать второй раз написанное Amed'ом :) Видимо, судьба у меня такая %)
Нет меня больше

Skarobey
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 01.06.2002 (Сб) 17:34
Откуда: Russia

Сообщение Skarobey » 22.08.2005 (Пн) 3:54

Спасибо... выручили...
:wink:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.08.2005 (Пн) 5:14

A.A.Z.! Ну почему всегда ты!? :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 109

    TopList