Страница: 1 |
Вопрос: Узнать коды RGB | Добавлено: 08.01.04 22:31 |
Автор вопроса: ![]() |
Как по цвету узнать коды RGB? |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Хранитель чата ICQ: 137392264 Вопросов: 8 Ответов: 557 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 08.01.04 22:54 |
цвет в VB представлен в виде BGR, соотвественно red = Int(color And 255)
green = Int((color And 65280) / 256) blue = Int((color And 16711680) / 65281) |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #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, увы, нет |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 163879423 Вопросов: 0 Ответов: 3 |
Профиль | Цитата | #5 | Добавлено: 14.01.04 15:50 |
Спасибо за науку Я думал так быстрее, но я не претендую на крутого программера А про STRING я просто не знал |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 173084484 Вопросов: 5 Ответов: 76 |
Web-сайт: Профиль | Цитата | #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 |
|