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

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

Как узнать противоположный цвет? [D7, XP]


d@nger ©   (2007-11-28 08:52:00) 

Здравствуйте! Подскажите пожалуйста, как определить проивоположный цвет исходного цвета? например у белого - черный.... мне это надо для определения цвета шрифта на цветном фоне. Может стандартная функция есть...но я ее не нашел... Спасибо!


clickmaker   (2007-11-28 16:17:00) [1]


> [17] Anatoly Podgoretsky ©   (28.11.07 16:14)

розовый цвет; доверься ему, и пятен - нет
(с)


Anatoly Podgoretsky   (2007-11-28 16:14:00) [2]

> Jeer  (28.11.2007 15:46:14)  [14]

И немного розового


PASZLIB   (2007-11-28 16:04:00) [3]

Спасибо амигос Джо! сам бы не додумался


Джо   (2007-11-28 15:55:00) [4]

> [13] PASZLIB   (28.11.07 15:45)
> вдогонку вопрос как сделать цвет светлее ?
>
> пока обхожусь так
>
> c:=clBlack;
> Form3.color:=c;
> ....
>
> c:=c-500;
> Form3.color:=c; делает серый
> цветные пока не пробывал


Под мои задачи когда-то подошла такая функция:

function Lighter(Color:TColor; Percent:Byte):TColor;
var
 R,
 G,
 B:Byte;
begin
 Color:=ColorToRGB(Color);
 R:=GetRValue(Color);
 G:=GetGValue(Color);
 B:=GetBValue(Color);
 R:=R+muldiv(255-R,Percent,100);
 G:=g+muldiv(255-G,Percent,100);
 B:=b+muldiv(255-B,Percent,100);
 Result:=RGB(R,G,B);
end;

Откуда содрал — не помню.


Jeer   (2007-11-28 15:46:00) [5]

Добавь белого


PASZLIB   (2007-11-28 15:45:00) [6]

вдогонку вопрос как сделать цвет светлее ?

пока обхожусь так

c:=clBlack;
Form3.color:=c;
....

c:=c-500;
Form3.color:=c; делает серый
цветные пока не пробывал


Anatoly Podgoretsky   (2007-11-28 15:20:00) [7]

А если это партия анархистов или белые?


Virgo_Style   (2007-11-28 12:43:00) [8]

> Правильный_Вася   (28.11.07 11:57) [9]

Партия сказала - красный, значит - красный. И никаких дальтоников...


Anatoly Podgoretsky   (2007-11-28 12:00:00) [9]


> я думаю он имеет ввиду инверт цвета...

А думать не надо, и чуть позже автор сказал, что ему нужен просто читаемый цвет на фоне другого, а это нельзя назвать противоположным.
Ему нужен совместимый цвет.


Правильный_Вася   (2007-11-28 11:57:00) [10]


> > А у красного например?Зеленый?

а для дальтоников?


d@nger   (2007-11-28 11:03:00) [11]

Мне просто нужно было чтобы текст отчетливо читался, я пожалуй воспользуюсь советом guav [6]. Всем большое спасибо за помощь!


Jeer   (2007-11-28 09:47:00) [12]

Может речь об этом ?
http://www.artprojekt.ru/School/Painting/016.html


guav   (2007-11-28 09:46:00) [13]

> мне это надо для определения цвета шрифта на цветном фоне.

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

Это может быть сделано по таблице.
Если таблице нет и надо попроще это реализовать оптимальным будет выбор между белым и чёрным в зависимости от яркости фона.
Типа так

function GetOptimalBkColor(AColor: TColor): TColor;
var
R, G, B: Word;
begin
R := GetRValue(AColor);
G := GetGValue(AColor);
B := GetBValue(AColor);
if 0.222*R + 0.707*G + 0.071*B <= 127 then
  Result := clWhite
else
  Result := clBlack;
end;


vegarulez   (2007-11-28 09:44:00) [14]

Anatoly Podgoretsky ©   (28.11.07 09:31) [4]
я думаю он имеет ввиду инверт цвета...


Anatoly Podgoretsky   (2007-11-28 09:31:00) [15]


> d@nger   (28.11.07 08:52)  

Дай определение противоположного цвета.


Virgo_Style   (2007-11-28 09:27:00) [16]

> Johnmen ©   (28.11.07 09:14) [2]
> А у красного например?


Зеленый?

А у серого (127,127,127)?


Johnmen   (2007-11-28 09:14:00) [17]


>  например у белого - черный....

А у красного например?


MBo   (2007-11-28 09:07:00) [18]

NewCol := OldCol xor #FFFFFF;
для части цветов будет работать плохо.


Наверх

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