![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ПРИВЕТ ВСЕМ! Не подскажите алгоритмик...
@andrew © (2002-03-25 16:53:00)..., может кто сталкивался: есть панель, цвет которой можно менять, и есть текст на этой панели, цвет которого должен вычислятся в зависимости от цвета панели: либо белый, либо черный (по принципу чтоб был читабильным). Вот собственно алгоритм вычисления цвета текста не подскажите. Всем Спасибо!
AFROLOV (2002-03-25 17:22:00) [1]Можно наложить еще условие чтобы метрика разности цвета фона и цвета текста была больше некоторой величины. В качестве метрики можно взять например |Rf-Rt|+|Gf-Gt|+|Bf-Bt|. В случаях если вышепредложенные подходы не обеспечат должной величины метрики можно в качестве приемлемого решения взять первое полученное с помощью random и удовлетворяющее условию.
MBo (2002-03-25 17:19:00) [2]ну как-нибудь так
j:=Panel.color;
i:=j Xor $FFFFFF;
k:=i xor j;
if (k and $FF)+((k shr 2) and $FF)+((k shr 4) and $FF)>60
then label1.font.color:=i
else label1.font.color:=clBlack;
Виктор Щербаков (2002-03-25 17:10:00) [3]Это всё одно и то же, лучше скажите как ему быть со значениями цвета близкими к (128, 128, 128)
MBo (2002-03-25 17:09:00) [4]пардон $FFFFFF
MBo (2002-03-25 17:07:00) [5]просто
Label1.Font.Color:=Panel.color Xor #FFFFFF;
Andrews (2002-03-25 17:05:00) [6]Используй RGB-каналы для задания цвета по-идее должно работать, т.е. если цвет плашки R31 G26 B23 то цвет текста вычисляется так R=255-31 G255-26 B255-23
Виктор Щербаков (2002-03-25 17:02:00) [7]Примерно так, но глюки с серым цветом. Их надо отдельно убирать.
Label1.Font.Color := RGB(not GetRValue(cl), not GetGValue(cl), not GetBValue(cl));
cl - цвет панели.