Составить программу которая демонстрирует сложение цветов

.
Иногда бывает нужно сложить два или более цветов для получения что-то типа переходного цвета.
Делается это весьма просто. Координаты получаемого цвета будут равны среднему значению
соответствующих координат всех цветов.
Например, нужно сложить красный и синий. Получаем
(255,0,0)+(0,0,255)=((255+0) div 2,(0+0) div 2,(0+255) div 2)=(127,0,127).
В результате получаем сиреневый цвет. Та2: сложить соответствующие координаты,
потом каждую сумму разделить нацело на количество цветов.
Поговорим теперь о градиентной заливке. Градиентная заливка — это заливка цветом с плавным
переходом от одного цвета к другому.
Итак, пусть заданы 2 цвета своими координатами ((A1, A2, A3) и (B1, B2, B3)) и
линия (длиной h пикселов), по которой нужно залить. Тогда каждый цвет каждого пиксела,
находящегося на расстоянии x пикселов от начала будет равен
(A1-(A1-B1)/h*x, A2-(A2-B2)/h*x, A3-(A3-B3)/h*x). Теперь, имея линию с
градиентной заливкой, можно таким образом залить

Сколько цветов угадали?🎨 Смешивание цветов


совершенно любую фигуру: будь то прямоугольник, круг или просто произвольная фигура.
Вот как выглядит описанный алгоритм:

for i:= 0 to h do begin

Result := Red + Green * 256 + Blue * 65536 ;

function GetPigmentBetween ( P1, P2, Percent: Double ) : Integer ;

Result := Round ( ( ( P2 — P1 ) * Percent ) + P1 ) ;

if Result > 255 then

function GetGradientColor2 ( R1, G1, B1, R2, G2, B2, Percent: Double ) : Integer ;

NewRed, NewGreen, NewBlue: Integer ;

if Percent > 1 then

NewRed := GetPigmentBetween ( R1, R2, Percent ) ;

NewGreen := GetPigmentBetween ( G1, G2, Percent ) ;

NewBlue := GetPigmentBetween ( B1, B2, Percent ) ;

Result := ColorFromRGB ( NewRed, NewGreen, NewBlue ) ;

function GetGradientColor3 ( R1, G1, B1, R2, G2, B2, R3, G3, B3, Percent: Double ) : Integer ;

This is similar to GetGradientColor2, except that it allows you to specify 3 colors instead of 2.>

Читайте также:
Логопедическая программа для постановки звука р

Result := GetGradientColor2 ( R1, G1, B1, R2, G2, B2, Percent * 2 )

Result := GetGradientColor2 ( R2, G2, B2, R3, G3, B3, ( Percent — 0.5 ) * 2 ) ;

Источник: www.delphisite.ru

смешивание 2-х RGBA цветов

Подскажите пожалуйста алгоритм на С/C++ , реализующих смешивание двух RGBA цветов, 8-битный альфа канал есть у обоих пикселей.

Сколько ни искал, нашёл только формулу Новый пиксел = (alpha)(цвет пиксела А) + (1 — alpha)(цвет пиксела В), но это для RGB+RGBA.

#1
12:17, 2 окт 2007

Этот вариант ничем не хуже любого другого.

#2
12:19, 2 окт 2007

За другими примерами ходить далеко не надо — см. настройку alpha blending.

#3
12:25, 2 окт 2007

а как рассчитывается альфа канал результирующего пикселя ? Верна ли формула

R_result = A2*R1 + (1-A2)*R2

Сложение цветов в RGB модели


G_result = A2*G1 + (1-A2)*G2
B_result = A2*B1 + (1-A2)*B2
A_result = A2*A1 + (1-A2)*A2

, где R1. A1 — исходный пиксель, R2. A2 — налагаемый пиксель

Уж извините чайника 🙂

#4
12:47, 2 окт 2007

alex_x1980
Нет, если уж так, то

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

A1 = src_A, dst_R = R2 и т. д. для G2 и B2 и A2 каналов

Иногда делают оптимизацию: заранее перемножают src_A на каждую компоненту, такой подход носит название premultiplied alpha blending:

R_result = src_A_R + (1-src_A) * dst_R
G_result = src_A_G + (1-src_A) * dst_G
B_result = src_A_B + (1-src_A) * dst_B
A_result = src_A_A + (1-src_A) * dst_A

> Правка: Исправил название

#5
14:16, 2 окт 2007

> токой подход носиит название prealpha blending

если быть точным, то premultiplied alpha blending.

#6
14:19, 2 окт 2007

stab
точно, я блин уже и подзабыл

Прошло более 5 лет

  • Odin P. Morgan
  • Постоялец
Читайте также:
Пример программы на 1c

#7
10:43, 19 сен 2013

Такой вопрос, думаю многие видели режимы наложения слоёв в фотошоп. alpha blending не позволяет добится эффекта аналогичного того-же overlay допустим или Dark. — а это необходимо для придания нужного эффекта. Всё что подобное нашёл — это смещение по палитре в старых играх, но как это реализовать в 24битном цвете? Проще говоря, маска должно не просто накладываться с альфой, а влиять на яркость контраст оригинала + должен учитываться диффузный цвет (ну или типа того). Есть ли способы реализовать подобное может кто мучился? Самому мучить данный вопрос тупо влом

ЗЫ тупо нужны режимы наложения слоёв из фотошопа в постобработке =)

Источник: gamedev.ru

Надо создать цветовой микшер. Python

Красный, синий и желтый называются основными цветами, потому что их нельзя получить путем смешения других цветов. При смешивании двух основных цветов получается вторичный цвет:

если смешать красный и синий, то получится фиолетовый; если смешать красный и желтый, то получится оранжевый; если смешать синий и желтый, то получится зеленый.

Напишите программу, которая считывает названия двух основных цветов для смешивания.

Если пользователь вводит что-нибудь помимо названий «красный», «синий» или «желтый», то программа должна вывести сообщение об ошибке. В противном случае программа должна вывести название вторичного цвета, который получится в результате. Формат входных данных На вход программе подаются две строки, каждая на отдельной строке. Формат выходных данных Программа должна вывести полученный цвет смешения либо сообщение «ошибка цвета», если введён был не цвет. Примечание 1. Если смешать красный и красный, то получится красный и т.д. Примечание 2. Поиграйтесь с настоящим цветовым микшером Мой код:

a, b = input(), input() if a != ‘красный’, a !=’желтый’, a !=’синий’: print(‘ошибка цвета’) elif b != ‘красный’, b !=’желтый’, b !=’синий’: print(‘ошибка цвета’) elif a == ‘красный’ and b == ‘синий’ or b == ‘красный’ and a == ‘синий’: print(‘фиолетовый’) elif a == ‘красный’ and b == ‘желтый’ or b == ‘красный’ and a == ‘желтый’: print(‘оранжевый’) elif a == ‘синий’ and b == ‘желтый’ or b == ‘синий’ and a == ‘желтый’: print(‘зеленый’) elif a ==’красный’ and b ==’красный’: print(‘красный’) elif a ==’синий’ and b ==’синий’: print(‘синий’) elif a ==’желтый’ and b ==’желтый’: print(‘желтый’)

Читайте также:
Как запустить программу в режиме исправления

Вопрос. Что не так в моем коде? Прошу дать развернутый ответ.

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru