Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329

Определение цвета: белый или черный?

31.01.2012, 11:06. Показов 5600. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у меня фон, оперделяемый юзером. Как прикинуть его яркость по RGB, например, чтобы принять решение печатать мне на нем белым или черным.
Т.е фон темный или светлый?
Ясен перец, что просто просуммировать составляющие RGB нельзя, ибо "G" в яркость вносит гораздо больший вклад, чем "B".

Кстати, может есть пример, как сами винды определяют цвет подписи (Ч или Б) к иконкам на рабочем столе, в зависимости от выбранной юзером заливки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.01.2012, 11:06
Ответы с готовыми решениями:

Закрасить экран в черный и белый цвета
1.Составить программу, которая при нажатии клавиши "пробел" одну половину экрана красит в белый цвет, а вторую в черный. 2.Программа,...

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

Найти вероятность вытащить белый и черный шары
4 шара белых и 5 черных, какова вероятность что вытащат 1 белый и 1 черный

39
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
02.02.2012, 14:17  [ТС]
Студворк — интернет-сервис помощи студентам
Нет, не работает ((

Цитата Сообщение от VladConn
RGB2HSL и для (255,0,0) и для (0,255,0) и для (0,0,255) возвращает одинаковую яркость, так это как раз правильно.
Это правильно для какого-нибудь линейного фотоприемного устройства.
А для глаза это неправильно. Глаз - нелинейный приемник.
Я о чем и толкую: попробуйте рисовать [bold]белым[/bold] по RGB (0,255,0)...
Винды, кстати, там подставляют черный.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
02.02.2012, 14:36
Letter D,

Все, я "give up". Но ведь я и предупреждал, что HSL.L может быть недостаточно. Нужна, видимо, эмпирическая формула завязывающая HSL.L, HSL.S и HSL.H. Если не найдете, попробуйте спросить Микрософт. Там ребята крутые.

VladConn
0
0 / 0 / 0
Регистрация: 07.06.2009
Сообщений: 9
06.02.2012, 00:41
Вот что придумал.
Вроде работает как в винде =)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function GetRColor(ByVal Color As Long) As Long
 
  Dim R&, G&, B&
  Dim Y#, U#, V#
 
  R = Color Mod 256
  G = (Color  256) Mod 256
  B = Int(Color / 256 / 256)
 
  'RGB â YUV
  Y = 0.299 * R + 0.587 * G + 0.114 * B
  U = -(0.147) * R - 0.289 * G + 0.436 * B '+ 128
  V = 0.615 * R - 0.515 * G - 0.1 * B '+ 128
 
  GetRColor = IIf(Y < 129, vbWhite, 0)
 
  ''YUV â RGB
  'R = Y + 1.14 * V
  'G = Y - 0.395 * U - 0.581 * V
  'B = Y + 2.032 * U
 
End Function
0
0 / 0 / 0
Регистрация: 07.06.2009
Сообщений: 9
06.02.2012, 00:43
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function GetRColor(ByVal Color As Long) As Long
 
  Dim R&, G&, B&
  Dim Y#, U#, V#
 
  R = Color Mod 256
  G = (Color  256) Mod 256
  B = Int(Color / 256 / 256)
 
  'RGB â YUV
  Y = 0.299 * R + 0.587 * G + 0.114 * B
  U = -(0.147) * R - 0.289 * G + 0.436 * B '+ 128
  V = 0.615 * R - 0.515 * G - 0.1 * B '+ 128
 
  GetRColor = IIf(Y < 129, vbWhite, 0)
 
  ''YUV â RGB
  'R = Y + 1.14 * V
  'G = Y - 0.395 * U - 0.581 * V
  'B = Y + 2.032 * U
 
End Function
0
0 / 0 / 0
Регистрация: 07.06.2009
Сообщений: 9
06.02.2012, 00:46
Извиняйте за флейм, но вот этот код короче:
Visual Basic
1
2
3
4
5
6
7
8
Function GetRColor(ByVal Color As Long) As Long
  Dim R&, G&, B&
  R = Color Mod 256
  G = (Color  256) Mod 256
  B = Int(Color / 256 / 256)
  Y = 0.299 * R + 0.587 * G + 0.114 * B
  GetRColor = IIf(0.299 * R + 0.587 * G + 0.114 * B, vbWhite, vbBlack)
End Function
0
0 / 0 / 0
Регистрация: 07.06.2009
Сообщений: 9
06.02.2012, 01:04
Ошибка в прошлой месаге.
Блин полчему тут нельзя удалять свои месаги ???

Вот последняя правильная версия кода:
Visual Basic
1
2
3
4
5
6
7
Function GetRColor(ByVal Color As Long) As Long
  Dim R&, G&, B&
  R = Color Mod 256
  G = (Color  256) Mod 256
  B = Int(Color / 256 / 256)
  GetRColor = IIf(0.299 * R + 0.587 * G + 0.114 * B < 129, vbWhite, vbBlack)
End Function
Еще раз прошу прощения за флейм.
Нехотел честно.
0
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
06.02.2012, 10:42
Я думаю нужно RGB переводить в LAB. Для того чтобы проще понимать можно запустить Photoshop и в нём в RBG выбирать цвет и он сразу показывает результат в HSB, LAB, CMYK.
Пример:
#00FF00 - LAB: L 88, A -79, B 81
#FFFFFF - LAB: L 100, A 0, B 0
RGB: R 25, G 128, B 0 - LAB: L 47, A -45, B 49

L в LAB это яркость (диапазон 0-100). Соответственно если она больше 50, то рисуем черным, иначе белым.

А есть ещё хороший линк:
Color Conversion Formulas
http://www.easyrgb.com/math.html
0
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
06.02.2012, 11:45  [ТС]
Dederer, да в фотошопе это легко посмотреть, а в VB?? )

SCINER, спасибо, но эти коэффициенты уже выложил Mz@2... А код их обработки мне не нужен, уж сам разберусь )

З.Ы.
И все-таки меня смущает, што зависимость яркости от RGB с коэффициентами линейная. Ибо если взять яркости каждого из них (чистого цвета) отдельно, и просуммировать, то получится более 100%... Смущает это меня...
0
Train
06.02.2012, 12:10
Может Mz@2 разъяснит откуда беруться такие коэффициэнты,
и почему сумма превышает 1?
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
06.02.2012, 12:32  [ТС]
Цитата Сообщение от Train
Может Mz@2 разъяснит откуда беруться такие коэффициэнты,
и почему сумма превышает 1?
Да дело даже не в этих коэффициентах. Что их сумма больше 1.
В фотошопе та же фигня. Вот я и думаю, что какая-то нелинейная зависимость (не просто суммирование) должна быть.
0
Train
07.02.2012, 18:15
А что фотошоп?
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
07.02.2012, 18:27  [ТС]
Яркость чиста красного (FF0000) - 54%
зеленого (00FF00) - 88%
синего (0000FF) - 30%

Яркость белого, догадываетесь? ) - 100%
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
07.02.2012, 19:04
Esli fonovij zvet vibiraetsya tol'ko iz gotovoj palitri, to mozhno prostim "select case" ili cherez Dictionary tupo vbit' - belij/chernij.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
07.02.2012, 19:06
Ya sdelal vash zapros na odnom iz britanskix forumov: tam rebyatki tozhe zakisli.
0
0 / 0 / 0
Регистрация: 07.06.2009
Сообщений: 9
08.02.2012, 14:43
Так ведь я уже привел рабочий код.
Чем он Вас не устраивает ???
Вроде Всегда правильно цвет подбирает =?
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
08.02.2012, 22:26
SCINER

Ya poproboval vash kod s vbRed: font poluchaetsya belij. Vrode chernij polojhen.

vladconn
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
08.02.2012, 22:29
Vprochem, ne znayu: i tak xorosho i tak xorosho.
0
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
09.02.2012, 11:09  [ТС]
Цитата Сообщение от SCINER
Так ведь я уже привел рабочий код.
Чем он Вас не устраивает ???
Вроде Всегда правильно цвет подбирает =?
Вам уже спасибо сказали. Заметив, что код никто не просил, спрашивали коэффициенты, а они уже были опубликованы до Вас. Без обид. )
...КОД Я САМ НАПИШУ! Не проблема.
А вот коэффициенты и их линейная зависимость вызывает сомнение, поэтому дискусцыя продолжается.
0
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
09.02.2012, 11:22  [ТС]
Впрочем, работа по коэффициентам меня вполне устраивает, да и похоже, она правильно отрабатывает, поэтому вопрос по яркости (ну её в ж...) я снимаю.
Всем спасибо.
0
1 / 1 / 0
Регистрация: 22.04.2011
Сообщений: 47
13.02.2012, 23:33
Я не совсем понял, что значит "больше 1". Вот моя формула:
Y = 0.299*R + 0.587*G + 0.114*B
0.299 + 0.587 + 0.114 = 1.000 !!!

Для белого (R=255;G=255;B=255) формула дает Y=255,
соответственно, для черного, Y=0. для различных цветов
преобразование выглядит сл. образом:
1) Y = 0.299*R0+0.587*G0+0.114*B0
2) R1 = G1 = B1 = Y
и у нас в итоге соответсвующий серый цвет, а там уж по вкусу в черно-белый.
А формула (коэффициенты) - когда-то увлекался радиоэлектроникой, в т.ч. и телевидинием, в общем, из теории телевидения.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.02.2012, 23:33

Изменить в другой программе белый текст на черный
Есть у кого идеи по этому поводу? За ранее благодарен

Окрасить одну половину экрана в белый цвет, а вторую - в черный
Использование модуля Graph. Составить программу, которая при нажатии, клавиши &quot;пробел&quot; одну половину экрана красит в белый цвет, а...

В приложениях белый фон поменялся на черный. и пропала контрастность в шрифтах metro
может я не по теме. но эта проблема меня достала. суть вот в чем: все норм работало, а потом в приложениях, которые от win8, типа почты,...

На шахматную доску случайным образом ставятся два слона – черный и белый
Всем доброго времени суток. Прошу помочь мне с решением задачки, никак не выходит... На шахматную доску случайным образом ставятся два...

Сколькими способами можно выбрать на шахматной доске два квадрата – белый и черный?
Сколькими способами можно выбрать на шахматной доске два квадрата – белый и черный?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru