Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-1095404297
Knight
2004-09-17 10:58
2004.10.10
Добрый день, весёлый час! Рады видеть нас у вас!!!


6-1091625074
Klopan
2004-08-04 17:11
2004.10.10
IRC


14-1095669902
Карелин Артем
2004-09-20 12:45
2004.10.10
Галлы vs Римляне. Было ли такое?


4-1094106544
Алексей
2004-09-02 10:29
2004.10.10
Как узнть активный язык ввода в другом приложении?


3-1095184734
Вано
2004-09-14 21:58
2004.10.10
Проверка структуры таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский