Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/50: Рейтинг темы: голосов - 50, средняя оценка - 4.50
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346

Как смешать 4 RGB цвета?

30.01.2011, 00:58. Показов 9906. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если нарисовать сетку из чередующихся линий 4-х цветов и посмотреть на нее с некоторого удаления - она сливается в один цвет. Кто знает по какой формуле?

Вот этот метод дает неправильный результат, а других не нашел:
C#
1
2
3
4
5
6
7
 public static Color MixColors(Color c1, Color c2, Color c3, Color c4)
        {
            int _r = Convert.ToInt32((float)(c1.R + c2.R + c3.R + c4.R) / 4f);
            int _g = Convert.ToInt32((float)(c1.G + c2.G + c3.G + c4.G) / 4f);
            int _b = Convert.ToInt32((float)(c1.B + c2.B + c3.B + c4.B) / 4f);
            return Color.FromArgb(_r,_g,_b);
        }
Цифры для проверки:
с1 - (0, 255, 0)
с2 - (255, 91, 15)
с3 - (174, 15, 255)
с4 - (255, 240, 242)

при смешивании должен получится результат - (213,183,191)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2011, 00:58
Ответы с готовыми решениями:

Смешать цвета
У меня есть ячейка таблица, скажем, красного цвета. Есть еще одна группы ячеек, выделенных желтым. Нужно сделать так, чтобы при пересечении...

Смешать два цвета RGBA, путем наложения одной на другую
Приветствую. Подскажите, пожалуйста, формулу альфа-смешивания цветов

Как записать RGB цвета в массив?
Здравствуйте, вот собственно код, нашел на форуме, выводит цвета нормально, но хочу записать эти цвета в массив, желательно в двоичном...

10
(Yellow_Duck)
 Аватар для MadMag
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
30.01.2011, 23:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
TColor __fastcall MiddleColor( const TColor BegColor, const TColor EndColor, const int CurIndex = 50, const int TotIndex = 100 );
 {int C0 = ColorToRGB( BegColor );
  int C1 = ColorToRGB( EndColor );
  Byte R, G, B;
  R =       ( ( C0 >> 0x00 ) & 0x000000FF );
  R = R + ( ( ( C1 >> 0x00 ) & 0x000000FF ) - R ) * CurIndex / TotIndex;
  G =       ( ( C0 >> 0x08 ) & 0x000000FF );
  G = G + ( ( ( C1 >> 0x08 ) & 0x000000FF ) - G ) * CurIndex / TotIndex;
  B =       ( ( C0 >> 0x10 ) & 0x000000FF );
  B = B + ( ( ( C1 >> 0x10 ) & 0x000000FF ) - B ) * CurIndex / TotIndex;
  return( TColor( ( R << 0x00 ) | ( G << 0x08 ) | ( B << 0x10 ) ) );
 }
Ну, как бе без комментариев.

Добавлено через 12 минут
Я проверил, в данном примере, что вы написали, получается более темный цвет, согласно этой функции.
Видимо цвета нельзя так смешивать последовательно.
Получается (202, 167, 186).
0
 Аватар для lenin133
6 / 6 / 0
Регистрация: 24.11.2010
Сообщений: 25
31.01.2011, 10:29
Доброго времени суток

Цвета можно складывать по закону Грассмана.
Например:
Та=wa1*P1+wa2P2+wa3P3
Тв=wв1*P1+wв2P2+wв3P3

Та + Тв = (wa1 + wb1) * P1 + (wa2 + wb2) * P2 + (wa3 + wb3) * P3

но есть фишка, цветовое пространство RGB, наложено на длинны волн излучения с перекрытием (см. картинку1)
Если зафиксировать значение яркости для четырех цветов, предполагая. что источник один, а смешивается отражательная способность предмета, то можно получить:

rR + gG + bB = Const

rr = rA(r1 + r2 + r3 + r4)
gg = gA(g1 + g2 + g3 + g4)
bb = bA(b1 + b2 + b3 + b4)

rR + gG + bB = rrR + ggG + bbB

Множитель можно вынести за цвета, получив универсальную константу rgbC, которая уравновесит все:
rR + gG + bB = rgbC (R(r1 + r2 + r3 + r4) + G(g1 + g2 + g3 + g4) + B(b1 + b2 + b3 + b4))

В приведенном выше посте от MadMag, при сложении 2-х цветов
пример:
возьмем 4 числа 1, 2, 1, 2
если 1 + 2 + 1 + 2 = 6, и 6/4= 1,5
, то
(1 + 2 = 3) 3/2 = 1,5
(1,5 + 1 = 2,5) 2,5/2 = 1,25
(1,25 + 2 = 3,25) 3,25/2= 1,625

Как же сложить последовательно цвета, и сохранить яркость?
Если мы знаем, что значение цвета в RGB системе цветов, меняется от 0 до 255
то предполагаем минимальную яркость 0, а максимальную 3 * 255 = 765
мы можем нормировать значения, и использовать взвешенные коэффициенты:
берем последовательность 1, 2, 1, 2 допустим это R

(1/255)R1 + (2/255)R2 = (x/255)R12
-не получается чего-то
х = 3 и та-же фигня. , или нет...
(3/255)R12 + (1/255)R3 = (x/255)R123
x = 4
(4/255)R123 + (2/255)R4 = (x/255)R1234
x = 5
просто складывать тоже не дело, яркость суммируется

попробуем перемножить:
1/255*2/255= (3,0757400999615532487504805843906e-5)
* 1/255 = 1,2061725882202169602943061115257e-7
* 2/255 = 9,460177162511505570935734208045e-10
тоже фигня какая то

попробуем приводить к единице
R1 + R2 +... =1
тогда
(1 + 2)x = 1
x = 1/3
(1+2)x/2= 0.5

(0.5 + 1)x = 1
x = 0,66666666666666666666666666666667
(0.5+1)x/2 = 0.5

(0.5+2)x = 1
x = 0.4
(0.5+2)x/2 = 0.5

Мы получили три числа, о чем они непонятно:
1/3
0,66666666666666666666666666666667
0.4

если использовать как коэффициент, то получим:
(1+2)*1/3=1
(1+1)*2/3=4/3 = 1(1/3)
(4/3+2)*0,4= 1(1/3)

их сумма 1,4
среднее 0,46666666666666666666666666666667

а если
(1 + 2)x = 1
x = 1/3
(1+2)x/2= 0.5
2 * (1/3) + 1 = 5/3 = 1,6666666666666666666666666666667

(5/3 + 1)х = 1
х = 3/8
(5/3 +1)х/2 = 1(1/3)
1 * (3/8) + 5/3 = 9/24 + 40/24 = 49/24 = 2 (1/24)

Если посмотреть для последовательности 1,2,1,2 описательную статистику, то получим:

Mean 1,5
Standard Error 0,288675135
Median 1,5
Mode 1
Standard Deviation 0,577350269
Sample Variance 0,333333333
Kurtosis -6
Skewness 0
Range 1
Minimum 1
Maximum 2
Sum 6
Count 4
Largest(1) 2
Smallest(1) 1
Confidence Level(95,0%) 0,918693116

и сравним ее с последовательностью 1,2,1
Mean 1,333333333
Standard Error 0,333333333
Median 1
Mode 1
Standard Deviation 0,577350269
Sample Variance 0,333333333
Kurtosis #DIV/0!
Skewness 1,732050808
Range 1
Minimum 1
Maximum 2
Sum 4
Count 3
Largest(1) 2
Smallest(1) 1
Confidence Level(95,0%) 1,434217577

то ничегошеньки непонятно. Короче я загнался, может, чтото из рассуждений пригодится
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
02.02.2011, 01:57  [ТС]
Вроде бы в первых двух постах сложение как раз по закону Грассмана, но результат темнее.

В то же время я взял в фотошопе нарисовал многократную последовательность тонких линий 4-х цветов. Взял, уменьшил масштаб так, чтобы картинка слилась в однотонный цвет, сделал скриншот и посмотрел полученный RGB-цвет (см. пост 1). На глаз соответствие хорошее, но как было получено это значение не совсем понятно.

Подозреваю, что при смешении как-то нужно учитывать различное ощущение яркости между R, G и B.
Т.е. (0,0,255) кажется темнее, чем (0,255,0), хотя по правилам они одинаковы по яркости.
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
02.02.2011, 11:35
Ключевой момент
взял в фотошопе нарисовал
и
уменьшил масштаб
, тут очень важно как было нарисовано, если линии были одинаковой толщины и имели "чистый" цвет, то результат получится вполне предсказуемый: линии Название: test1.png
Просмотров: 1415

Размер: 113 байт и уменьшенный вариант Название: test2.png
Просмотров: 1423

Размер: 79 байт, как видно, в результате получился цвет (171, 150, 128), что полностью соответствует формуле расчета из первого поста.

Подозреваю, что при смешении как-то нужно учитывать различное ощущение яркости между R, G и B.
Т.е. (0,0,255) кажется темнее, чем (0,255,0), хотя по правилам они одинаковы по яркости.
Яркость у них не одинаковая, только интенсивность, а ощущения правильные. Наши глаза чувствительнее всего к зеленому.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
03.02.2011, 07:44
Кто объяснит такую загадку: цвет 0000FF на глаз темнее, чем 00FF00, но FFFFFF на глаз белый?
0
 Аватар для lenin133
6 / 6 / 0
Регистрация: 24.11.2010
Сообщений: 25
03.02.2011, 08:49
Зачем смешивать восприятие и физические величины. Ощущение света. вообще субъективно, колбочки палочки, и прочие биологические вещи. Инфракрасное, и ультрафиолетовое излучение, вообще не видно, однако и интенсивность, и яркость у них есть.
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
03.02.2011, 10:10
taras atavin, это не загадка, а аддитивная цветовая модель.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.02.2011, 08:39
Про аддитивность я знаю. Мне не ясно, почему при при смешении основных цветов, воспринимаемых, как цвета различной яркости результирующий цвет не имеет зеленоватого оттенка.
0
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
04.02.2011, 11:40
Шестнадцатеричная RGB-запись цвета не имеет ничего общего с длинами волн и их интенсивностью воздействия на определенные колбочки глаза человека. Ну то есть, связь-то конечно есть, но она не такая линейная и очевидная, как FF0000 + 00FF00 + 0000FF = FFFFFF.

Ссылки по теме:
http://ru.wikipedia.org/wiki/Зрение_человека
http://ru.wikipedia.org/wiki/Колбочки
http://ru.wikipedia.org/wiki/Метамерия_(цвет)
http://ru.wikipedia.org/wiki/LAB
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
04.02.2011, 12:02
Еще стоит глянуть:
http://ru.wikipedia.org/wiki/Цвет
http://ru.wikipedia.org/wiki/П... ятия_цвета
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2011, 12:02
Помогаю со студенческими работами здесь

Как в TChart добавить цвета RGB
Как в TChart добавить цвета RGB? Например: with Series1 do begin Add(R1, 'Раздел 1',#FFBADE); Add(R2, 'Раздел...

Как в DBChart добавить цвета RGB?
Как в DBChart добавить цвета RGB? Делаю так: with Series1 do begin Add(R1, 'Раздел 1',rgb(49,47,138)); Add(R2,...

Как отсканировать Picturebox и получить цвета по RGB?
Помогите пожалуйста. Через API умею, но занимает неприемлимое время.Заранее спасибо.

Как выделить определенный диапазон цвета RGB на картинке bmp?
всем доброго времени суток!помогите,пожалуйста, в написании кода.есть картинка bmp. Надо разложить ее на цвета rgb. определить диапазон...

Как переделать код чтоб использовать RGB цвета, а не стандартные?
Как переделать код чтоб использовать RGB цвета, а не стандартные? Dim mygraphics As Graphics = MyBase.CreateGraphics Dim...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru