Страница: 1 |
Вопрос: Узнать коды RGB
Добавлено: 08.01.04 22:31
Автор вопроса: Ujif | Web-сайт: - | ICQ: -
Как по цвету узнать коды RGB?
Ответить
Номер ответа: 2Автор ответа: Volchonock
ICQ: 163879423 Вопросов: 0Ответов: 3
Профиль | | #2
Добавлено: 13.01.04 00:26
Всё так, однако умножение и деление не самые быстрые операции, особенно если выполнять их в процедуре _MouseMove. Есть вариант работать со строкой, мне кажется это быстрее (в примере я получал HEX-значение цвета для WEB):
Dim vbcolor As String
Function convert()
vbcolor = Hex$(pcolor)
vbcolor = Space(6 - Len(vbcol)) + vbcol
vbcol = Replace(vbcol, " ", "0", , , vbTextCompare)
'*****************************************************
'*тогда значения цветов будут
'*****************************************************
red = Right(vbcol, 2)
green = Mid(vbcol, 3, 2)
blue = Left(vbcol, 2)
End Function
Ответить
Номер ответа: 3Автор ответа: Sharp
Лидер форумаICQ: 216865379 Вопросов: 106Ответов: 9979
Web-сайт: sharpc.livejournal.com Профиль | | #3
Добавлено: 13.01.04 00:47
Replace, к слову, тоже не самая быстрая операция, особенно если учесть, насколько она криво реализована (посмотрите на этот ужас СофтАйсом). Вместо этого:
vbcolor = Space(6 - Len(vbcol)) + vbcol
vbcol = Replace(vbcol, " ", "0", , , vbTextCompare)
стоит использовать это:
vbcol=String(6-len(vbcol))+vbcol
Да и вообще, если говорить о скорости, когда это Hex было быстрее побитного And и целочисленного деления с умножением?
2boevik: Заменив int()/256 на ()\256 ты получишь существенный выигрыш в скорости.
Ответить
Номер ответа: 4Автор ответа: Sharp
Лидер форумаICQ: 216865379 Вопросов: 106Ответов: 9979
Web-сайт: sharpc.livejournal.com Профиль | | #4
Добавлено: 13.01.04 00:49
red = Int(color And 255)
green = Int((color And 65280) / 256)
blue = Int((color And 16711680) / 65281)
Что за странное число - 65281???
Правильно этот код будет выглядеть так:
r=c and &HFF
g=(c and &HFF00)\&H100
b=(c and &FF0000)\&H10000
А вообще здесь надо использовать поразрядный сдвиг, но его в VB, увы, нет
Ответить
Номер ответа: 6Автор ответа: univercal
ICQ: 173084484 Вопросов: 5Ответов: 76
Web-сайт: univercal-s.narod.ru Профиль | | #6
Добавлено: 14.01.04 20:46
> g=(c and &HFF00)\&H100
Здесь тоже небольшая ошибочка, надо вот так:
g=(c and &HFF00&)\&H100
Иначе VB будет считать, что &HFF00 - это Integer, а т.к. C - всегда Long, то он автоматически проводит следующие преобразования:
&HFF00 (integer) = -256 = &HFFFFFF00 (long)
Ответить
Страница: 1 |
Поиск по форуму