Уверен, что каждому кодеру приходилось много раз смешивать краски и что-то где-то рисовать. По крайней мере, все мы ходили на уроки рисования в школе. Смешивание различных цветов дает новые цвета, которые, в свою очередь можно снова смешивать и в пределе получить, скажем, чёрный цвет — когда все краски замешаны в одну непонятную массу. Но это все в, скажем так, реальном мире. А как дела обстоят с цветами в мире программ? Цель работы на сегодня — «научить» нашу программу смешивать краски в нужных пропорциях и получать тот цвет, который Вы бы получили, смешав настоящие краски, а не пиксели на мониторе.
http://s3.uploads.ru/L6GiK.png
Работая с цветами в Delphi (да и не только с Delphi), мы уже привыкли, что для работы с цветом у нас есть модель RGB (Red, Green, Blue) в который все цвета получаются путем смешивания трех основных. Самый простой алгоритм смешивания двух RGB-цветов в равных пропорциях — это:

Код:
var R,G,B:byte;
begin
  R:=(R1+R2) div 2;
  G:=(G1+G2) div 2;
  B:=(B1+B2) div 2;
end;

Просто, удобно, лаконично. А теперь вернемся к нашей задаче. Как показать художнику, с кисточкой в одной руке и палитрой в другой, какой цвет он получит, если возьмет и смешает в своей палитре две краски? Попробуйте сейчас, используя приведенный выше код сложить два цвета: синий (0, 0, 255) и желтый (255, 255, 0). Что получится? Получится некое подобие серого цвета. Что-то типа такого:

http://s3.uploads.ru/ln4PW.png

А теперь попробуйте сделать то же самое, НО по-старинке, без компьютера, без RGB и прочих технических штук — возьмите два карандаша/маркера и почиркайте ими на белом листе бумаги. Что получилось?

Должно получиться что-то типа такого:

http://s2.uploads.ru/cyCYI.jpg

Как так получилось? Магии никакой нет, приведенный выше код, если и дает ошибку в определении нового цвета, то явно не такую, чтобы вместо зеленого получился серый цвет.
Конечно, RYB обладает своими недостатками, но, тем не менее, эта цветовая модель нашла свое применение в изобразительном искусстве.