Как применить фильтр яркости Paint.NET программно? - PullRequest
0 голосов
/ 06 января 2011

Я хочу применить тот же фильтр Luminosity в Paint.net

По сути, я хочу вычислить компонент яркости и установить его на ноль. Вот что я попробовал до сих пор:

  • Преобразуйте RGB в XYZ в CIElab, используя формулы, найденные здесь: http://www.easyrgb.com/index.php?X=MATH
  • Установить компонент яркости (L) на ноль.
  • Преобразование обратно в XYZ в RGB.

У меня были многочисленные проблемы с использованием этого метода. Иногда, когда я конвертирую обратно в RGB, некоторые компоненты находятся вне диапазона 0-255. Кроме того, я не получаю точный эффект яркости Paint.net, когда задаю кривую, похожую на линию с y = 0.

Paint.net не является открытым исходным кодом. Не могли бы вы помочь мне понять, что он делает?

Спасибо.

П.С .: Я программирую на C #.

1 Ответ

0 голосов
/ 12 января 2011

Я полагаю, что они просто добавляют / вычитают постоянную из значения RGB.

R' = max( min(255, R+diff), 0);
G' = max( min(255, G+diff), 0);
B' = max( min(255, B+diff), 0);

Хотя использование упомянутого вами метода, вероятно, даст более правильные результаты.Ожидается получение значений за пределами диапазона 0-255, и вы должны с этим справиться.Вы также можете учесть гамма-коррекцию в своих расчетах.

...