Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Узнать коды RGB Добавлено: 08.01.04 22:31  

Автор вопроса:  Ujif | Web-сайт: - | ICQ:

Как по цвету узнать коды RGB?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #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
Автор ответа:
 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, увы, нет

Ответить

Номер ответа: 5
Автор ответа:
 Volchonock



ICQ: 163879423 

Вопросов: 0
Ответов: 3
 Профиль | | #5 Добавлено: 14.01.04 15:50

Спасибо за науку :)

Я думал так быстрее, но я не претендую на крутого программера

А про STRING я просто не знал :(

Ответить

Номер ответа: 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам