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

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

Формула инверсия цвета


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

Ega23 ©   (2005-01-12 13:45:00) 

Несколько необычный вопрос. Имеется следующая проблема - раскрашиваю TRxDBGrid. В запросе из базы летит строка, типа: FCL:255,FSZ:10,FST:0,BCL:65280,
где FCL - FontColor, FSZ - FontSize, FST - FontStyle, BCL - BackgroundColor.
Так вот. Вся проблема в том, что как только я меняю бэкграунд с белого на любой другой цвет - пропадает Highlight. Нужно его восстановить. Поскольку clHighlight - чистая константа, изменить цвет выделения можно только изменив цвет бэкграунда.
Самый простой вариант -
if Highlight then
 begin
  Background:=clHighlight;
  AFont.Color:=clHighlightText;
 end;

но это не совсем красиво. Допустим, цвет фона сам по себе синий. Тогда этой подсветки не будет видно. Или он, какой-нибудь красный, с которым синий не сочетается (это к примеру, чувство цвета у меня напроч отсутствует).
Собственно вопрос: существует ли формула инверсии цвета? Т.е., к примеру, цвет фона синий - меняем по этой формуле местами биты - получаем чвет выделения на синем - жёлтый.


boriskb   (2005-01-12 14:04:00) [41]

Ega23 ©   (12.01.05 14:01) [12]
Самое поганое, что заказчик хочет красить данные на свой вкус, иначе забил бы в базу 2 десятка цветов + контрастные к ним.


Он что - дальтоник? Он настаивает что цвет может быть абсолютно любым из 32 бит?
Тогда работать сним, убеждать.
IMHO если у него такое странное цветовосприятие - что бы ты не выдумал, он будет придираться.


Anatoly Podgoretsky   (2005-01-12 14:03:00) [42]

pasha_golub ©   (12.01.05 14:02) [14]
Мысль двигается одинаково


pasha_golub   (2005-01-12 14:02:00) [43]

В таком слуае есть предложение, не просто xor делать. А потом "округлять" (приводить) к ближайшему "грубому" цвету из заранее подготовленной палитры.


Anatoly Podgoretsky   (2005-01-12 14:02:00) [44]

Ega23 ©   (12.01.05 13:59) [11]
Не надо путать системную палитру и свойство Highloght
Для твоего случая я бы посоветовал замену по сокращенной таблицы цветов. Какой цвет подставлять подобрать экспериментально исходя из сообственных предпочтений.


Ega23   (2005-01-12 14:01:00) [45]

Нет, смотри [8], результат будет $808080, что по сути равно $7F7F7F

Вот и я о том же. Самое поганое, что заказчик хочет красить данные на свой вкус, иначе забил бы в базу 2 десятка цветов + контрастные к ним.


Ega23   (2005-01-12 13:59:00) [46]

цвет выделения не обязательно clBlue.

Цвет выделения описан в Graphics.pas и представляет собой

const
 clHighlight = TColor(COLOR_HIGHLIGHT or $80000000);
 clHighlightText = TColor(COLOR_HIGHLIGHTTEXT or $80000000);


где COLOR_HIGHLIGHT и COLOR_HIGHLIGHTTEXT - цвета элементов текущей цветовой схемы Windows.


Anatoly Podgoretsky   (2005-01-12 13:57:00) [47]

Ega23 ©   (12.01.05 13:53) [5]
Нет, смотри [8], результат будет $808080, что по сути равно $7F7F7F


wal   (2005-01-12 13:57:00) [48]

>Вот и хотелось посоветоваться - xor на всех цветах нормальные сочетания даёт?
Нет.
10000000 xor 11111111 = 01111111,
а у 10000000 и 01111111 разница совсем не велика, на глаз не заметишь.

С уважением.


Anatoly Podgoretsky   (2005-01-12 13:56:00) [49]

TUser ©   (12.01.05 13:50) [2]
цвет выделения не обязательно clBlue. Теперь представь $FFFFFF и фон $7F7F7F


pasha_golub   (2005-01-12 13:54:00) [50]

Ega23 ©   (12.01.05 13:53) [5]
Лучше всего на черно-белой паре xor работает. :)

Есть такая фишка, есть... Токо вот где?


Ega23   (2005-01-12 13:54:00) [51]

Это не инверсия, а контрастные цвета и/или совместимые цвета,

Ну я это и имел ввиду.


Ega23   (2005-01-12 13:53:00) [52]

Ну, xor тоже первое, что пришло мне в голову. Проблема в том, что в сочетаниях цветов я разбираюсь как свинья в апельсинах. Вот и хотелось посоветоваться - xor на всех цветах нормальные сочетания даёт?


Игорь Шевченко   (2005-01-12 13:52:00) [53]


> существует ли формула инверсии цвета?


Самый примитивный способ - инвертировать все биты цвета :) Серый останется серым, но в ряде случаев достаточно.

С уважением,


Anatoly Podgoretsky   (2005-01-12 13:52:00) [54]

Это не инверсия, а контрастные цвета и/или совместимые цвета, а сама формула инверсии следующая - Color := Color XPR $FFFFFF, но результат по контрастности будет плохой.


TUser   (2005-01-12 13:50:00) [55]

Я, когда грид красил, то писал в DrawCell
  if CanFill then
     with Self.Canvas do begin
        if (gdSelected in AState) and (not (gdFocused in AState)) then
           Brush.Color:=Color xor clBlue
           else Brush.Color:=Color;

Здесь clBlue - цвет выделения.


pasha_golub   (2005-01-12 13:49:00) [56]

xor?


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

Наверх

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