Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Программирование графики
Перезагрузить страницу Формула изменения яркости
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Формула изменения яркости - 29.10.2003, 04:15

Как расчитать цвет в RGB с новой яркостью? Если яркость от 0.0 до 1.0, дан исходный трехканальный цвет , а нужен новый... Ну, типа как в стандартном диалоге выбора цвета Windows.
Ответить с цитированием
  (#2 (permalink)) Старый
IgorBIK IgorBIK вне форума
Member
 
Сообщений: 260
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.12.2002
По умолчанию 29.10.2003, 23:21

Компоненты цвета R,G и B нужно умножить на яркость.[/code]
Ответить с цитированием
  (#3 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Wrong issue! - 30.10.2003, 03:24

Неправильный ответ! Было бы все так просто... Если так считать, то, например цвет RGB(255, 0, 0) при максимальной яркости останется таким же, а должен быть 255, 255, 255 - белый! RGB - это как 3 координаты вектора, яркость цвета - длина вектора, которая не может быть больше чем 255... Вот с этим-то и главная заморочка... Плюс ко всему, Photoshop считает яркость как:
Y= 0.2125R + 0.7154G + 0,0721В
потому что разные каналы по разному влияют на яркость. Но мне нужно преобразование в обратную сторону!
Ответить с цитированием
  (#4 (permalink)) Старый
IgorBIK IgorBIK вне форума
Member
 
Сообщений: 260
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.12.2002
По умолчанию 30.10.2003, 09:15

Цвет (255,0,0) итак максимально яркий. Я запускаю Photoshop и вижу что для цвета (255,0,0) яркость равна 100%. Понижаю яркость до 50% и получаю (128,0,0) и т.д.
Чистый цвет неможет перейти в белый. То есть когда яркость меняется от 0 до 255 цвет не переходит в белый.
Кстати ты пишеш что длина вектора неможет быть более 255 , а для цвета(255,255,255) она равна 441,67...
И в стандартном диаоге Windows цвет тоже не перехоит в белый.
Ответить с цитированием
  (#5 (permalink)) Старый
Ikshot Ikshot вне форума
Member
 
Сообщений: 451
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.06.2002
По умолчанию 01.11.2003, 06:05

Ты имей в виду, что человеческий глаз наиболее чествителен к зелному цеву и наименее чуствителен к синему... отсюда и коэффициенты...
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
IgorBIK IgorBIK вне форума
Member
 
Сообщений: 260
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.12.2002
По умолчанию 01.11.2003, 12:02

Это понятно. Но законы математики требуют, чтобы при увеличении яркости все RGB компоненты цвета увеличивались в одно и тоже число раз. А это достигается умножением. Если этого не соблюдать, то произойдет изменение цвета.
Теперь о переходе цвета в белый. Это связано с тем, что в глазу (или в видеокамере) спектр света фильтруется на три компонента. И естественно эти фильтры имеют погрешность, то есть они пропускают чуть-чуть и другого цвета. При низких яркостях этого незаметно, но при сильном увеличении яркости может произойти насыщение, и цвет будет казаться белым.

Кстати кроме разной чувствительности к цветам, глаз еще воспринимает яркость по логарифмической зависимости.
Ответить с цитированием
  (#7 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 02.11.2003, 04:10

Ну ладно, с векторами я накосячил... Но все-таки, как рассчитать все эти логарифмические зависимости? Скажем по-другому: пусть цвет RGB(255,0,0) имеет яркость = 1.0, то как посчитать его для яркости, например, 2.0? Ведь в байт число 255*2 не засунешь! А ноль нулем так и останется...

P. S. Возможно, я путаю яркость и интенсивность, если это не одно и то же
Ответить с цитированием
  (#8 (permalink)) Старый
Станислав Тарасенко Станислав Тарасенко вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.04.2016
По умолчанию 02.04.2016, 12:46

Самое удивительное, что не нашел прямого ответа на этот вопрос нигде. Пришлось придумать самому. Вот именно, что цвет 255.0.0, увеличенный вдвое, должен стать 255.128.128. И т.д.

Вот рабочий код VB6 изменения цвета на заданный коэффициент. Кидаете на любую пустую форму - будет меняться её фоновый цвет:

vb Код:
Private Sub Form_Load()
Dim Байт(1 To 3) As Long
Me.Show

цвет = &H336698
Me.BackColor = цвет

Байт(1) = (цвет And &HFF0000) / &H10000
Байт(2) = ((цвет And &HFF00) / &H100) And &HFF
Байт(3) = цвет And &HFF

MsgBox "Исходный цвет - " & Hex(цвет) & vbCrLf & "Показываю разложение по одному цвету:" & vbCrLf & _
    Hex(Байт(1)) & vbCrLf & Hex(Байт(2)) & vbCrLf & Hex(Байт(3))

ярче_в = 2
MsgBox "Изменяем яркость в " & ярче_в & " раз:"
    For н = 1 To 3
        остаток = 255 - Байт(н)
        Байт(н) = 255 - (остаток / ярче_в)
    Next

новый_цвет = Байт(1) * &H10000 + Байт(2) * &H100 + Байт(3)


Me.BackColor = новый_цвет
MsgBox "Собрали новый цвет: " & Hex(новый_цвет)

Me.BackColor = Me.BackColor Xor &HFFFFFF
MsgBox "А теперь инверсия цвета: " & Hex(Me.BackColor)


End

End Sub

Последний раз редактировалось Станислав Тарасенко; 02.04.2016 в 12:49
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое изменение яркости Andrey_k Драйвера 1 07.06.2012 01:11
Настройка яркости и контраста у формата фильмов MKV horton Видео 3 06.04.2012 02:45
Минимум яркости при питании от батарей riddon Батареи и питание 0 11.03.2012 12:04
Пропала регулировка яркости на Windows 7 Number036 Видеосистема 0 26.12.2010 00:01
Зоны разной яркости!!! Феофан Мониторы 22 25.06.2010 22:39
Изменение яркости экрана alexu C++ Builder 1 29.09.2008 12:43
Помогите разобраться - мерцает экран на максимуме яркости Yuriy_K Ноутбуки 7 14.11.2007 18:27
что здесь:формула, формула массива, или значение? Алек_Л Visual Basic 16 13.02.2007 16:26
Подстройка яркости в консоле/сеансе DOS Pr0phet Офтопик 1 09.08.2006 03:40
формула Sergeant Visual Basic 4 07.07.2006 22:32
Сглаживание по яркости imported_xander Программирование графики 0 30.06.2005 17:45
Необходимо получить матрицу яркости изображения Anonymous C++ Builder 0 15.07.2003 21:28



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов