Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Математика смешивания цветов?   Найти похожие ветки 

 
lipskiy ©   (2004-09-22 23:04) [0]

Как правильно смешать два RGB-цвета, чтобы получить средний между ними оттенок по правилам субстрактивного (не аддитивного) смешения цветов?


 
lipskiy ©   (2004-09-22 23:25) [1]

Нашел в UBPFD (http://delphibase.endimus.com/?action=viewfunc&topic=mediacolors&id=10499).

Если кому интересено:

function MixColors(const Colors : array of TColor) : TColor;
var
 R, G, B : Integer;
 i : Integer;
 L : Integer;
begin
 R := 0;
 G := 0;
 B := 0;
 for i := Low(Colors) to High(Colors) do
   begin
     Result := ColorToRGB(Colors[i]);
     R := R + GetRValue(Result);
     G := G + GetGValue(Result);
     B := B + GetBValue(Result);
   end;
 L := Length(Colors);
 Result := RGB(R div L, G div L, B div L);
end;


 
DiamondShark ©   (2004-09-23 00:04) [2]

Это по правилам аддитивного.


 
SPeller ©   (2004-09-23 03:24) [3]

function ColorsMix( Color1, Color2: TColor ): TColor;
{$IFDEF F_P}
begin
 Result := ((Color2RGB( Color1 ) and $FEFEFE) shr 1) +
           ((Color2RGB( Color2 ) and $FEFEFE) shr 1);
end;
{$ELSE DELPHI}
asm
  PUSH EDX
  CALL Color2Rgb
  XCHG EAX, [ESP]
  CALL Color2Rgb
  POP EDX
  AND EAX, 0FEFEFEh
  AND EDX, 0FEFEFEh
  SHR EAX, 1
  SHR EDX, 1
  ADD EAX, EDX
end;


(c) kol.pas


 
jack128 ©   (2004-09-23 03:30) [4]

Этот вопрос не так давно поднимался вроде..
GuAV(с) там еще какую то супер быструю реализацию на асме написал.


 
SergP.   (2004-09-23 04:02) [5]


>  lipskiy ©   (22.09.04 23:04)
> Как правильно смешать два RGB-цвета, чтобы получить средний
> между ними оттенок по правилам субстрактивного (не аддитивного)
> смешения цветов?


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


 
MBo ©   (2004-09-23 07:43) [6]

>SergP.   (23.09.04 04:02) [5]
Аддитивная модель используется при выводе на излучающие устройства - например, монитор - R,G,B цвета складываются.
Субтрактивная - при выводе на пассивные устройства - например, печать на бумаге - CMY Cyan,Magenta,Yellow (+K(Black) для улучшения качества) - краска поглощает часть спектра, часть отражает. Теоретически эти модели комплементарны - цвета одной модели дополнительны к другой.


 
DiamondShark ©   (2004-09-23 11:07) [7]


> SPeller ©   (23.09.04 03:24) [3]

Однако, точность теряется.


 
GuAV ©   (2004-09-23 12:45) [8]

Чтобы не терять точность:
function ColorsMix( Color1, Color2: TColor ): TColor;
begin
 Color2RGB( Color1 );
 (Color2RGB( Color2 );
 Result := ((Color1 and $FEFEFE) shr 1) +
           ((Color2  and $FEFEFE) shr 1) +
            ( Color1  and Color2 and $010101);
end;

> GuAV(с) там еще какую то супер быструю реализацию на асме
> написал.

Я придумал то же что и SPeller.
Самое смешное, что kol.pas у меня тогда был, мог бы там найти

Однако не удивляйтесь, что синий+желтый - это серый.


 
GuAV ©   (2004-09-23 12:49) [9]


>  Color2RGB( Color1 );
>  Color2RGB( Color2 );

Ну то есть
Color1 := Color2RGB( Color1 );
Color2 := Color2RGB( Color2 )

та ветка вот
http://delphimaster.net/view/8-1093550869/



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

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
9-1086951394
Bizon's
2004-06-11 14:56
2004.10.10
Помогите ламеру с DelphiX


1-1096280146
Koala
2004-09-27 14:15
2004.10.10
Ошибка закрытии формы


3-1094716608
Klerk
2004-09-09 11:56
2004.10.10
Два приложения используют BDE.


14-1095417379
Knight
2004-09-17 14:36
2004.10.10
FireBird...


3-1094999467
XAdmin
2004-09-12 18:31
2004.10.10
ADO MS SQL преобразует тип byte а boolena