Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 03:55   #1
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию Смешивание двух RGBA цветов

Здравствуйте, господа!
Встал боком вопрос о смешивании двух RGB цветов с альфаканалом: то бишь один цвет (Dst) накладывается на другой (Src).
С альфой, еще куда не шло, разобрался, считается по:
Код:
Res.A := Src.A + (1 - Src.A) * Dst.A;
Выяснил путем тыка в пеинте, а вот с цветами все хуже: никак не уловить связь. Единственное, что нашел, так это вот это:
Код:
R_result = src_A*src_R + (1-src_A) * dst_R 
G_result = src_A*src_G + (1-src_A) * dst_G 
B_result = src_A*src_B + (1-src_A) * dst_B 
A_result = src_A*src_A + (1-src_A) * dst_A
Но оно не работает. Благодарю за советы!
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 19.02.2012, 13:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А так
Код:
R_result = src_A*src_R + (1-src_A) * dst_A * dst_R
G_result = src_A*src_G + (1-src_A) * dst_A * dst_G
B_result = src_A*src_B + (1-src_A) * dst_A * dst_B
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.02.2012, 14:42   #3
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Dj_smart Посмотреть сообщение
Но оно не работает. Благодарю за советы!
Заработает если привести значения альфы к 0..1
x128 вне форума Ответить с цитированием
Старый 19.02.2012, 17:25   #4
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Цитата:
А так
К сожелению, не работает: пиксели, которые вообще не трогают, стали "затемняться".

UPD: хотя уже ближе к истине, т.к. на конечный цвет влияет как альфа источника, так и альфа назначения.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг

Последний раз редактировалось Dj_smart; 19.02.2012 в 17:42.
Dj_smart вне форума Ответить с цитированием
Старый 19.02.2012, 18:30   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Формулы расчета
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.02.2012, 01:54   #6
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Огромное спасибо, по началу не работало, грешил на формулы, а потом обнаружил что система прорисовки кривовата. Все ок!
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 26.02.2012, 15:16   #7
Dron97
 
Регистрация: 18.02.2012
Сообщений: 4
По умолчанию

так не пробовал?
Код:
R_result := (src_R + dst_R) div 2;
Dron97 вне форума Ответить с цитированием
Старый 01.03.2012, 20:35   #8
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

На всякий случай запощу конечный результат.
Код:
    RsltF.A := ClrF.A + (1 - ClrF.A) * SrcF.A;

    RsltF.R := (ClrF.R * ClrF.A + SrcF.R * SrcF.A * ( 1 - ClrF.A)) / RsltF.A;
    RsltF.G := (ClrF.G * ClrF.A + SrcF.G * SrcF.A * ( 1 - ClrF.A)) / RsltF.A;
    RsltF.B := (ClrF.B * ClrF.A + SrcF.B * SrcF.A * ( 1 - ClrF.A)) / RsltF.A;
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смешивание цвета в области перекрытия двух однотонных 3d фигур Trinock Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 15.02.2012 16:59
найти пересечение двух прямоугольников заданных координатами двух углов Этотак Помощь студентам 0 11.05.2011 23:55
Смешивание AngelOfDeathSX Мультимедиа в Delphi 1 16.10.2010 21:32
Смешивание деталей изображения после разделения Юлия_ZZZZ Помощь студентам 2 30.04.2010 18:47