Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизМатематика смешивания цветов? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c