Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть цвет фона, надо вычислить наиболее контрастный цвет для [D7]


Страницы:   1 2 3

Вин2 ©   (2005-06-12 02:12:00) 

текста на нём. Как это можно сделать ?


Anatoly Podgoretsky   (2005-06-12 15:31:00) [21]

Ученик   (12.06.05 15:29) [26]
Посмотри как сделана в Дельфи настройка цветов редактора.


Anatoly Podgoretsky   (2005-06-12 15:30:00) [22]

Если надо просмотреть для всех 16 миллонов цветов, то не представляю, кроме перевода в другую цветовую плоскость.


Ученик   (2005-06-12 15:29:00) [23]

>Anatoly Podgoretsky ©   (12.06.05 15:24) [24]
Согласить, как-то не очень, но Ваша идея по формированию цвета стала понятна, спасибо за ответ.


Anatoly Podgoretsky   (2005-06-12 15:27:00) [24]

Эталон 01-03 _00__01__02__03_
Эталон 04-07 _04__05__06__07_
...
Эталон 60-63 _60__61__62__63_


Anatoly Podgoretsky   (2005-06-12 15:24:00) [25]

000000
000040
000080
0000С0
//0000FF
004000
...
0040С0
//0040FF
...
C00000
..C0C0
//00FFFF
//FF0000
...
//FFFFFF

for R := 0 TO 3 //4 для FF
 for G := 0 TO 3 //4 для FF
   for B := 0 TO 3 //4 для FF

формирование TColor 64 или 125 базовых цветов для фона.
Тут общий принцип, с TLabel цвета фона можно статически указать в дизайн тайм.


Ученик   (2005-06-12 15:12:00) [26]

>Anatoly Podgoretsky ©   (12.06.05 15:01) [22]

Пример кода, в Вашем варианте вместо вопросиков что написать ?


procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 DrawGrid1.Canvas.Brush.Color := ?????;
 DrawGrid1.Canvas.Font.Color := ContrastColor(DrawGrid1.Canvas.Brush.Color);
 DrawGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 3, 'Текст')
end;


Anatoly Podgoretsky   (2005-06-12 15:01:00) [27]

Ученик   (12.06.05 14:50) [19]
Ну по вкусу, например с шагом 64 для RGB, получится 4^3 = 64, это вполне достаточно, промежуточные цвета мало отличаются. Речь естественно идет о фоне.


Ученик   (2005-06-12 14:57:00) [28]

>Просто Джо ©   (12.06.05 14:54) [20]

А более конкретный ответ есть ?


Просто Джо   (2005-06-12 14:54:00) [29]


>  [19] Ученик   (12.06.05 14:50)
> Вопрос в формировании цвета фона для конкретной ячейки,
> он же, наверно, формируется по какому-то выражению?

Да формула проста: I like it :^)


Ученик   (2005-06-12 14:50:00) [30]

>Anatoly Podgoretsky ©   (12.06.05 14:44) [18]
Вопрос в формировании цвета фона для конкретной ячейки, он же, наверно, формируется по какому-то выражению ?


Anatoly Podgoretsky   (2005-06-12 14:44:00) [31]

Ну например на канве 16*16 квадратиков, или просто такое же количество TLabel - нужно же только для визуализации результата, как например в настройках цветов в среде Дельфи. Меняешь цвет и сразу видишь результат.

Далее два варианта или закладываешь это в виде константы в программу или позволяешь это делать в диалоге пользователю, второй вариант снимает все возражения насчет вкусов.


Ученик   (2005-06-12 14:40:00) [32]

>Anatoly Podgoretsky ©   (12.06.05 13:06) [15]

Если не секрет, как Вы закрашиваете табличку 16*16 ?


Alx2   (2005-06-12 13:25:00) [33]

Вариант Бориса (MBo)
Имеет минимум в расстоянии при исходном цвете RGB(127,127,112).
Надпись, сделанная цветом ContrastColor(RGB(127,127,112)) на фоне цветом RGB(127,127,112) практически не читается.


Anatoly Podgoretsky   (2005-06-12 13:06:00) [34]

Результат с таблицей подстановки дает более приемлемые результаты. Для оценки на экране делается тибличка 16*16 или более и глазами смотритс, тут же можно подобрать желаемый цвет для таблицы подстановки. Как я сказал можно такое делать или по одному или по двум старщим битам, если нужно большая селективность. Но как правило уже по одному старшему биту достаточно. Достоинство таблицы именно в гибкости, подстройка под персональный вкус.


Ученик   (2005-06-12 12:57:00) [35]

>Борыч   (12.06.05 12:44) [11]
Попробовал для RGB(128, 128, 192) - получилось не очень, хотя итоговых цветов гораздо больше.


Anatoly Podgoretsky   (2005-06-12 12:46:00) [36]

Ученик   (12.06.05 12:36) [9]
Немного ошибся 0 на 8 элементов. Насчет выбора - выбрать желаемые ручками, дает наиболее приемлемый результат. Но если цвета устраивают, то предложеное Alx2


Ученик   (2005-06-12 12:45:00) [37]

>Alx2 ©   (12.06.05 12:42) [10]
Спасибо за Ваши ответы


Борыч   (2005-06-12 12:44:00) [38]

в большинстве случаев приемлемо:

function ContrastColor(AColor: TColor): TColor;
const TolerSq = 16 * 16;
begin
 if Sqr(GetRValue(AColor) - $80) + Sqr(GetGValue(AColor) - $80)
  + Sqr(GetBValue(AColor) - $80) < TolerSq then
  Result := (AColor + $7F7F7F) and $FFFFFF
 else
  Result := AColor xor $FFFFFF;
end;

© MBo


Alx2   (2005-06-12 12:42:00) [39]

>Ученик   (12.06.05 12:36) [9]

Если в том смысле, что я написал - нет. У куба восемь углов -> 8 экстремальных точек.

Можно попробовать еще другие системы цветовых координат (LaB, LHS,..). Но сколько там будет  - не проверял.


Ученик   (2005-06-12 12:36:00) [40]

>Alx2 ©   (12.06.05 12:24) [7]

Увеличение вариантов цветов возможно ?

>Anatoly Podgoretsky ©   (12.06.05 12:26) [8]

Сами значения массива выбираются на свой вкус или они определены ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо