Форум: "Прочее";
Текущий архив: 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.57 MB
Время: 0.043 c