85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346

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

30.01.2011, 00:58. Показов 9926. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru