Міністерство освіти і науки України
Національний університет „Львівська Політехніка”
Практична робота № 1
„ КОЛІРНІ МОДЕЛІ. ЗМІШУВАННЯ КОЛЬОРІВ”
з курсу „ Геометричне моделювання у конструюванні інженерних об'єктів і систем ”
Львів-2005
ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
Варіант 3
а) провести перетворення кольору (див. Додаток 2, номер кольору=номеру варіанту) з RGB => CMY;
б) зробити один колір (див. Додаток 2, перший колір = номер варіанту) світлішим на 35%, та другий колір (див. Додаток 2, другий колір = номер варіанту+35) світлішим на 1/5 та змішати два отриманих кольори.
3.
aqua
00
FF
FF
38.
darkviolet
94
00
D3
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
КОЛІРНА МОДЕЛЬ CMYK
Більшість кольорів, що ми бачимо в оточуючому нас світі, є наслідком відбивання і поглинання світла. Наприклад, сонячне світло, падаючи на зелену траву, частково поглинається, і відбивається тільки його зелена складова. При друкуванні на принтері, на папір наноситься кольорова фарба, що відбиває тільки світло визначеного кольору. Усі інші кольори поглинаються, чи віднімаються із сонячного світла. На ефекті віднімання кольорів побудована модель представлення кольору, що називається CMYK. Модель використовується в поліграфії. Як основні кольори тут також приймаються три: Cyan (голубой), Magenta (рожевий чи його ще називають пурпурний), Yellow (жовтий), К (чорний від слова ЬіасК) використовується для підвищення контрастності надрукованих зображень. Ця модель використовується для опису відбитих від поверхні папера кольорів, тому вона називається субтрактивной (subtract -віднімати). Між моделями RGB та CMYK немає однозначної відповідності, тобто деякі відтінки кольору однієї моделі не можуть бути в принципі відтворені в іншій моделі і навпаки. Саме цим викликана необхідність калібрування устаткування (сканера, монітора і принтера) на предмет відповідності кольорів (рис. 8).
Рис. 8 Геометричне представлення колірної моделі CMYK
Вибір кольорів для моделі невипадковий, вони тісно зв'язані з кольорами моделі RGB. Блакитний колір утвориться при поглинанні червоного, пурпурний при поглинанні зеленого, а жовтий відбитий колір виходить у результаті поглинання синього. При нанесенні більшої кількості фарб різних кольорів поглинається більше кольору і менше відбивається. Таким чином, при змішуванні максимальних значень цих трьох кольорів ми повинні одержати чорний колір, а при повній відсутності фарби повинний вийти білий колір. Однак у дійсності при змішуванні трьох фарб виходить брудно-бурий колір, тому що використовувані реальні барвники відбивають і поглинають колір не так, як описано в теорії. Чорний колір виходить тільки при додаванні чорної фарби, тому в модель CMYK і додана чорна складова. Система CMYK широко застосовується в поліграфії. Типографське устаткування працює винятково з цією моделлю, та й сучасні принтери теж використовують барвники чотирьох кольорів. При друкуванні на папір наносяться кілька шарів прозорої фарби, і в результаті ми одержуємо кольорове зображення, що містить мільйони різних відтінків. Системи RGB і CMYK зручні при роботі з конкретним устаткуванням, але не дуже зручні для людського сприйняття. У різновиді цієї моделі, що називається CMY, відсутній чорний колір, вона застосовується значно рідше.
ЗМІШУВАННЯ КОЛЬОРІВ
Кольори на основі додавання та віднімання.
Хоча світловий потік і складається з хвиль різної довжини, наші очі в першу чергу реагують на світлові довжини хвиль червоного, зеленого і синього кольорів. Червоний, зелений і синій називають аддитивньїми чи кольорами на основі додавання (additive primaries), тому що нескінченна безліч кольорів може бути створена шляхом додавання різних ступенів насиченості червоного, зеленого і синього світла. Шляхом додавання одних основних кольорів до інших одержують ще три кольори: ціан, маджента і жовтий. Якщо скласти разом червоний, зелений і синій, вийде білий колір. Нижче видно, як червоний, зелений і синій, сполучаючись один з одним, створюють білий, ціан, мадженту і жовтий:
червоний + зелений + синій = білий
зелений + синій = ціан
синій + червоний = маджента
зелений + червоний = жовтий
З ціану, мадженти і жовтого можуть бути створені інші нескінченні кольори. Наприклад, нижче показується, як ці три кольори можуть застосовуватися для одержання чорного, червоного, зеленого і синього:
ціан + маджента + жовтий = чорний
ціан + маджента = синій
жовтий + маджента = червоний
жовтий + ціан = зелений
Ціан, маджента і жовтий створюють інші кольори шляхом абсорбції і вирахування кольорів. Тому їх іноді називають кольорами на основі віднімання чи субтрактивньїми (subtractive primaries). Це основа більшої частини процесу друк. Наприклад, коли крапки жовтої друкованої фарби перекривають крапки друкованої фарби маджента, виходить червоний. Коли дві друковані фарби комбінуються, вони поглинають зелені і сині довжини світлових хвиль і відбивають оку тільки червоні.
Найпростіший спосіб змішати два кольори сі та с2, це обчислити середні значення rgb-значень (тобто 50% на 50%).
Приклад на Delphi [5]:
function GetMixColor (cl, c2: TColor): TColor; begin
// обчислюємо середні значення Червоного, Синього і Зеленого значень
// кольорів сі та с2: Result := RGB (
(GetRValue (cl) + GetRValue (c2)) div 2, (GetGValue (cl) + GetGValue (c2)) div 2, (GetBValue (cl) + GetBValue (c2)) div 2 ); end;
ПОБУДОВА СВІТЛІШИХ ТА ТЕМНІШИХ КОЛЬОРІВ
Далі показаний принцип одержання зі звичайного стандартного кольору більш темний чи більш світлий. Так само розглянуто, як цей принцип реализовани в програмному коді на Delphi.
Кожний із трьох основних кольорів (Червоний, Зелений, Синій) можуть мати значення від 0 до 255, відповідно скомбінувавши їх ми можемо одержати 16,777,216 можливих кольорів. Візуально це можна предствить як три осі куба, у якому напрямку х, у та z відповідають за кольори червоний, зелений і синій. У сполученні ці напрямки дають точку в кубі, що представляє один колір з 16 мільйонів. Точка куба, у якій значення дорівнює 0 (0,0,0) відповідає чорному кольору, значення (255,255,255) - білому кольору, (255,0,0) - чисто червоному тощо.
Якщо візуально провести лінію між яким-небудь кольором (r,g,b) і білим кольором (255,255,255), то вийде, що на цій лінії будуть лежати всі значення даного кольору (r,g,b). Якщо ми будемо рухатися по лінії у бік білого кольору, то яскравість буде збільшуватися доти, поки не одержимо чисто білий колір.
Те ж саме можна зробити і для зменшення яскравості кольору. Досить провести лінію з кольору (r,g,b) у чорний (0,0,0). Тобто при русі по лінії до чорного кольору ми будемо зменшувати яскравість доти, поки не одержимо чорний колір.
Функція Darker повертає нове значення кольору, що буде на певну кількість відсотків темніше. Відповідно при 100% ми одержимо чорний колір.
Функція Lighter повертає колір, що світліше на певну кількість відсотків вхідного. 100% - білий колір.
Функції Darker та Lighter вимагають 2 параметри і використовуються приблизно так: Panell.Color := Darker(clBlue,20); Отримуємо панель кольору, що на 20% темніше звичайного синього кольору.
Функції:
function Darker(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(r,Percent,100); //процент % зменшення яскравості
g:=g-muldiv(g,Percent,100);
b:=b-muldiv(b,Percent,100);
result:=RGB(r,g,b); end;
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;
Також представлені деякі функції, у яких вже додані стандартні значення процентов.
function SlightlyDark(Color:TColor):TColor; begin
Result := Darker(Color,25); end;
function Dark(Color:TColor):TColor; begin
Result := Darker(Color,50);
end;
function VeryDark(Color:TColor):TColor;
begin
Result := Darker(Color,75);
end;
function SlightlyLight(Color:TColor):TColor;
begin
Result := Lighter(Color,25);
end;
function Light(Color:TColor):TColor;
begin
Result := Lighter(Color,50);
end;
function VeryLight(Color:TColor):TColor;
begin
Result := Lighter(Color,75);
end;
Приклад застосування:
Panell.Color := Light(clBlue);
Panell.Color := SlightlyDark(clRed);
Panell.Color := VeryLight(clMagenta);
Текст програми
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMan, StdCtrls, ExtCtrls;
type
TMainForm = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
XPManifest1: TXPManifest;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Label7: TLabel;
Label8: TLabel;
Shape5: TShape;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
function Lighter(r,g,b:integer;Percent:byte):Tcolor;
begin
r:=r+muldiv(255-r,percent,100);
g:=g+muldiv(255-g,percent,100);
b:=b+muldiv(255-b,percent,100);
lighter:=RGB(r,g,b);
end;
function GetMixColor(c1,c2: TColor):Tcolor;
begin
GetMixColor:=RGB(
(getRValue(c1)+GetRValue(c2)) div 2,
(getGValue(c1)+GetGValue(c2)) div 2,
(getBValue(c1)+GetBValue(c2)) div 2
);
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
r,g,b,c,m,y,r2,g2,b2:integer;
begin
r:=StrToInt(Edit1.Text);
g:=StrToInt(Edit2.Text);
b:=StrToInt(Edit3.Text);
r2:=StrToInt(Edit7.Text);
g2:=StrToInt(Edit8.Text);
b2:=StrToInt(Edit9.Text);
c:=255-r;
m:=255-g;
y:=255-b;
Edit4.Text:=IntToStr(c);
Edit5.Text:=IntToStr(m);
Edit6.Text:=IntToStr(y);
Shape1.Brush.Color:= b shl 16 or g shl 8 or r;
Shape2.Brush.Color:= b2 shl 16 or g2 shl 8 or r2;
Shape3.Brush.Color:=Lighter(r,g,b,35);
Shape4.Brush.Color:=Lighter(r2,g2,b2,20);
Shape5.Brush.Color:=GetMixColor(Shape3.Brush.Color,Shape4.Brush.Color);
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
Close;
end;
end.
Результат роботи програми
Висновок
В даній лабораторній роботі ми ознайомилисьз Колірною моделлю CMYK, з перетворенням кольорів з однієї моделі в іншу, змішуванням кольорів та побудовою світліших кольорів.