Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

сложение цвета   Найти похожие ветки 

 
XcCCC   (2009-08-15 13:26) [40]

[20] Вдогонку - желтый с синим должен давать белый, а не зеленый.

это как ? я смешиваю 2 краски с желтым и синим, ну никак не белую не получить!
Оговорюсь мне нужно смешивать реальные краски в банке.
Желтый с синим дает серый по функции

function GetMixColor (c1, c2: TColor): TColor;
begin
Result := RGB (
                (GetRValue (c1) + GetRValue (c2)) div 2,
                (GetGValue (c1) + GetGValue (c2)) div 2,
                (GetBValue (c1) + GetBValue (c2)) div 2
              );
end;


что скорее так и есть
синий+красный=фиолетовый
синий+белый=светло синий

Теперь мучаюсь добавить в формулу процентное соотношение.
Изначально в формуле 1:1
Буду думать как сделать к примеру 1:2, 1:3, 2:3, 1:4, 3:4


 
Дмитрий С ©   (2009-08-15 13:30) [41]


> Юрий Зотов ©   (15.08.09 12:40) [37]

А ты реально не понимаешь что я хочу сказать или притворяешься?
Возьми два прозрачных цветных стекла. Синее или Желтое. совмести и посмотри на просвет. Какой получится? Белый?


 
Дмитрий С ©   (2009-08-15 13:32) [42]


> Желтый с синим дает серый по функции
>
> function GetMixColor (c1, c2: TColor): TColor;
> begin
> Result := RGB (
>                 (GetRValue (c1) + GetRValue (c2)) div 2,
>
>                 (GetGValue (c1) + GetGValue (c2)) div 2,
>
>                 (GetBValue (c1) + GetBValue (c2)) div 2
>               );
> end;
>
> что скорее так и есть

Что тебе нужно то?


 
Юрий Зотов ©   (2009-08-15 13:33) [43]

Вот слегка модифицированный пример - введены оттенки цветов (то есть, яркость). На форму дополнительно кинуть TrackBar, назначить ему тот же обработчик OnChange и код этого обработчик слегка подправить:

// OnShow, ComboBoxN.OnChange, TrackBar.OnChange
procedure TForm1.ChangeColor(Sender: TObject);
var
 Y, C1, C2, C3: cardinal;
begin
 Y := MulDiv($FF, TrackBar1.Position, TrackBar1.Max);
 C1 := (Y shl (ComboBox1.ItemIndex * 8));
 C2 := (Y shl (ComboBox2.ItemIndex * 8));
 C3 := (Y shl (ComboBox3.ItemIndex * 8));
 Color := MixColors(C1, C2, C3);
 Caption := IntToHex(Color, 8)
end;


 
vrem   (2009-08-15 13:48) [44]

Дмитрий С ©
наверно он имеет в виду не чисто белый, а зеленовато-белый, яркий, в р-г-б же одинаковые значения сразу всех каналов р, г, б задают оттенки серого

*летают. но низэнько-низэнько :))


 
Дмитрий С ©   (2009-08-15 13:51) [45]

Чуть мозг не взорвал.
Голубой : 00ffff  (не синий блин)
Желтый: ffff00
после обычного GetMixColor чуть выше приведеного действительно дает зеленый оттенок.


 
Дмитрий С ©   (2009-08-15 13:54) [46]


> Юрий Зотов ©   (15.08.09 13:33) [43]

я прекрасно представляю как образуются цвета на экране. Причем тут смешиваение тоды?


 
Юрий Зотов ©   (2009-08-15 14:10) [47]

> XcCCC   (15.08.09 13:26) [40]
> Дмитрий С ©   (15.08.09 13:32) [42]

1. Читайте [24] и [34]. Краска и стекло поглощают, а монитор излучает. Поймите разницу.

Желтая краска (стекло). Поглощают синий, остаются красный и зеленый.
Синяя краска (стекло). Поглощают красный и зеленый, остается синий.

В итоге - если поглощение 100%-ное, то не останется ничего и получим черный. Но в реальности 100%-ного поглощения не бывает, поэтому получаем не черный, а различные оттенки.

Далее. Если реальные (то есть, не 100%-ные) поглощения красного, зеленого и синего идеально одинаковы, то это будет серый цвет (что и наблюдаем в [40]). То есть, именно белый, только с пониженной яркостью.

Если же поглощения красного, зеленого и синего неодинаковые (что в реальности и бывает), то можем получить оттенок любого цвета. Например, очень светлое желтое стекло с очень темным синим стеклом дадут цвет, который глаз воспримет, как все равно синий. А если стекла в сумме поглощают больше синего и красного, то получим как раз зеленый. Да и вообще можем получить любой цвет - все зависит от свойств стекол.

2. Воспроизведите пример с модификацией [43] и подвигайте ползунок яркости. Если останутся вопросы, замените этот ползунок тремя - чтобы регулировалась не общая яркость, а яркость каждого цвета отдельно. Подвигайте ползунки - все увидите сами.

==============

Пример точно воспроизводит смешение цветов в RGB-модели. С некоторой дискретностью, разумеется - потому что в один байт (цвет) нельзя записать дробное значение.


 
Дмитрий С ©   (2009-08-15 14:18) [48]


> Юрий Зотов ©   (15.08.09 14:10) [47]

Нагляднее будет моргать очень быстро. Красный/Зеленый/Красный/Зеленый/... а казаться будет что Желтый.


 
Anatoly Podgoretsky ©   (2009-08-15 18:31) [49]

> XcCCC  (15.08.2009 13:26:40)  [40]

А ты по CMYK смешивай краски в банке


 
Юрий Зотов ©   (2009-08-15 19:25) [50]

Дабы все-таки взлетел...
:o)

Вот полный код формы. Ничего на нее кидать не надо, сразу запускаем.

unit ColorsMixing2;

interface

uses
 Windows, Graphics, Controls, Forms, ComCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   procedure FormShow(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   tbR, tbG, tbB: TTrackBar;
   Panel: TPanel;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses
 Math;

function MixColors(C1, C2: cardinal): cardinal; overload;
var
 R, G, B : byte;
begin
 R := Min(GetRValue(C1) + GetRValue(C2), 255);
 G := Min(GetGValue(C1) + GetGValue(C2), 255);
 B := Min(GetBValue(C1) + GetBValue(C2), 255);
 Result := RGB(R, G, B)
end;

function MixColors(C1, C2, C3: cardinal): cardinal; overload;
var
 C: cardinal;
begin
 C := MixColors(C1, C2);
 Result := MixColors(C, C3)
end;

procedure TForm1.FormShow(Sender: TObject);
var
 CR, CG, CB: cardinal;
begin
 CR := tbR.Max - tbR.Position;
 CG := (tbG.Max - tbG.Position) shl 8;
 CB := (tbB.Max - tbB.Position) shl 16;
 Panel.Color := MixColors(CR, CG, CB);
 Caption := ColorToString(Panel.Color)
end;

procedure TForm1.FormCreate(Sender: TObject);

 function CreateTrackBar(AHint: string; ATabOrder: integer): TTrackBar;
 begin
   Result := TTrackBar.Create(Self);
   with Result  do
   begin
     Parent := Self;
     Orientation := trVertical;
     Align := alLeft;
     TickMarks := tmBoth;
     Width := 40;
     Max := 255;
     Position := 255;
     Frequency := 5;
     PageSize := 51;
     ShowHint := True;
     Hint := AHint;
     TabOrder := ATabOrder;
     OnChange := OnShow
   end
 end;

begin // FormShow
 tbB := CreateTrackBar("Blue", 2);
 tbG := CreateTrackBar("Green", 1);
 tbR := CreateTrackBar("Red", 0);
 Panel := TPanel.Create(Self);
 Panel.Parent := Self;
 Panel.Align := alClient;
 Panel.Caption := ""
end;

end.

Теперь главное - к чему все это.

Панель отображает смесь трех основных цветов - R, G, B. Яркость каждого их этих цветов в их смеси задается соотвествующим ползунком.

Но можно сказать и иначе - панель отображает смесь ДВУХ (а не трех) цветов. Один из них - это основной цвет, задаваемый любым ползунком. А второй из них - это НЕ основной цвет, а смесь двух оставшихся основных цветов в заданной их ползунками пропорции.

Таким образом, наблюдаем смешение любых цветов и их оттенков в модели RGB. Причем обратите внимание на Caption: clYellow + clBlue = clWhite.

Но не clGreen. В полном соответствии с физикой...
:o)


 
XcCCC   (2009-08-16 18:10) [51]

[21]
да всего ничего - подбор нужного цвета для покраски.
И иногда обратная задача есть цвет (вещь перед перед монитор)
задача получении такого же цвета из имеющихся банок (тут оттенки
будут задаватся с помощью частей основных красок)
моник откалиброван есно,
после компа сначала будет проводится опыты на соотвествие угаданного)


 
Inovet ©   (2009-08-16 21:14) [52]

> [51] XcCCC   (16.08.09 18:10)

"Где солнечный рисуя свет / живёт художник и поэт..."
(с) см в ветке о поэзии.


 
Омлет   (2009-08-18 20:09) [53]

http://www.efg2.com/Lab/Graphics/Colors/ColorMix.htm


 
Inovet ©   (2009-08-18 21:45) [54]

Кстати, у мужчит чаще чем у женщин встречается врождённое нарушение цветоощущения, слышал, что чуть ли не у 10% в большей или меньшей степени. Это определяется у окулиста по специальным рисункам.


 
Inovet ©   (2009-08-18 22:23) [55]

> [54] Inovet ©   (18.08.09 21:45)
> по специальным рисункам.

http://sla-avia.narod.ru/rabkin.jpg

Как я понял 1 и 3 столбцы оригинальные, 2 и 4 уже переделаны по цвету, т.е. смотреть надо на оригинал. Не знаю насколько правильно с монитора их смотреть.


 
XcCCC   (2009-08-21 10:58) [56]

http://www.efg2.com/Lab/Graphics/Colors/ScreenColorMixCMY.gif

это кажись верное представление


 
Inovet ©   (2009-08-21 11:15) [57]

> [56] XcCCC   (21.08.09 10:58)
> http://www.efg2.com/Lab/Graphics/Colors/ScreenColorMixCMY.gif
>
> это кажись верное представление

Что верное? Это вычитание из белого.


 
Dimka Maslov ©   (2009-08-21 11:54) [58]


> Dimka Maslov ©   (12.08.09 18:29) [12]


Написано неправильно. На самом деле надо преобразовывать цвет в цветовое простанство HSL (HSB). Вот тогда смешивание цветов  будет выражаться как

H = (H1 + H2 + 1.0) / 2.0;
if H > 1 then H := H - 1;
S = (S1 + S2) / 2.0
L = (L1 + L2) / 2.0



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.042 c
15-1250927746
palva
2009-08-22 11:55
2009.10.25
День Флага


2-1251778934
Phoenix
2009-09-01 08:22
2009.10.25
Обратная связь


2-1251683194
Johnnnn
2009-08-31 05:46
2009.10.25
Цветной текст ДЛЯ richedit?


2-1251465886
stas
2009-08-28 17:24
2009.10.25
Сообщение о успешной установке сервиса


2-1251817288
EH
2009-09-01 19:01
2009.10.25
Скрыть ячейки StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский