Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2019, 22:32   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Палитра RGB773

Работаю с палитрой RGB 773, делаю цвета на изображении светлее или темнее за счёт изменения цветов в палитре. Налетел на такую вещь. Берем черный цвет 000 и делаем его светлее, получаем такую цепочку: 000, 111, 222, 333, 443, 553, 663, 773.
Но если взять белый цвет то получаем цепочку: 773, 662, 551, 440, 330, 220, 110, 000.
Как видно они не идентичны.
Обе цепочки (субъективно) визуально имеют право на существование. Но как правильно?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.10.2019, 01:08   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

правильно - 000, 110, 221, 331, 442, 552, 663, 773

То еть, тот цвет, в котором обрезан младший разряд, должен меняться в два раза медленнее
Black Fregat вне форума Ответить с цитированием
Старый 09.10.2019, 08:38   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
правильно - 000, 110, 221, 331, 442, 552, 663, 773
Спасибо! Результат действительно лучше
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.10.2019, 23:25   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
правильно - 000, 110, 221, 331, 442, 552, 663, 773
Еще вопрос по теме.
Привольно ли так поступить для того что-бы сделать любой цвет светлее:
Код:
   #ggg=#ggg+1; #rrr=#rrr+1;
   if #rrr//2=0 & #ggg//2=0 then #bbb=#bbb+1
   if #ggg>7 then #ggg=7
   if #rrr>7 then #rrr=7
   if #bbb>3 then #bbb=3
Предположим у нас темно зеленый цвет 040, по этой схеме получаем: 150, 261, 371, 472, 572, 673, 773.
Чует моё сердце, что я делаю что-то не правильно.... Получаться, для каждого цвета 7 шагов. Но визуально, если вывести всю палитру, зеленых оттенков больше 7.
2019-10-10_00-31-16.png
С уважением, Алексей.

Последний раз редактировалось tae1980; 09.10.2019 в 23:32.
tae1980 вне форума Ответить с цитированием
Старый 10.10.2019, 03:03   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Если делать один шаг, то надо случайно изменять либо не изменять последнюю координату с вероятностью 0.5
Если делать несколько шагов, то изменять последнюю координату на каждом втором шаге

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

Последний раз редактировалось Black Fregat; 10.10.2019 в 03:06.
Black Fregat вне форума Ответить с цитированием
Старый 10.10.2019, 21:08   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Если делать один шаг, то надо случайно изменять либо не изменять последнюю координату с вероятностью 0.5
Но тогда будет нельзя делать возвраты назад.
Если посмотреть на приведенную картинки палитры видно, что есть довольно много градаций одного цвета, при переходе от светлого к темному. При таком подходе они совершенно не учитываются.
Вот разбор карты зеленого цвета
2019-10-10_07-26-59.jpg
Видно что тут идут не значительные изменения зеленного цвета. А есть ещё и другие оттенки зеленного. Но, например, у красного цвета оттенки расположены по другому. Единой системы я не вижу.
А здесь приведу пример последовательного изменения одного цвета. Видно, что в конце цвет вообще переходит в желтый. И на всех этапах синяя составляющая совершенно не меняется.
2019-10-10_22-12-55.jpg
С уважением, Алексей.

Последний раз редактировалось tae1980; 10.10.2019 в 21:25.
tae1980 вне форума Ответить с цитированием
Старый 11.10.2019, 11:33   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Вроде нашел решение, но заточенное под мой случай.
У меня кроме палитры 8bpp (rgb 773) есть исходная палитра 24bpp. Цвет из палитры 24bpp переводим в формат YCbCr, изменяем яркость и переводим обратно в RGB.
Но решение считаю частичным, так что продолжаю поиск изменения яркости внутри палитры 8bpp.
Минусом данного решения явлется необходимость наличия палитры 24bpp, и более того если необходимо последовательное изменения цвета, то цвет в палитры 24bpp должен оставаться оригинальным (незатронутый конверсей в 8bpp). При попытке восстанавливать цвет 24bpp из 8bpp и работать с ним, получается совершенно неадекватный результат.

Код:
   Y=Trunc(  0.299  * rrr + 0.587  * ggg + 0.114 * bbb) /* канал яркости */
   Cb=Trunc(-0.1687 * rrr - 0.3313 * ggg + 0.5   * bbb + 128.0)
   Cr=Trunc( 0.5    * rrr - 0.4187 * ggg - 0.0813* bbb + 128.0)

   if ?bright=1 then Y=Y+36 /* Светлее */
   else Y=Y-36 /* Темнеее */

   rrr=Trunc(Y + 1.402 * (Cr - 128.0))
   if rrr>255 then rrr=255
   else if rrr<0 then rrr=0
   ggg=Trunc(Y - 0.34414 * (Cb - 128.0) - 0.71414 * (Cr - 128.0))
   if ggg>255 then ggg=255
   else if ggg<0 then ggg=0
   bbb=Trunc(Y + 1.772 * (Cb - 128.0))
   if bbb>255 then bbb=255
   else if bbb<0 then bbb=0

   rrr8=format(rrr*(7/255),,0) /* 24bpp в 8bpp */
   ggg8=format(ggg*(7/255),,0) /* format - округление до целого */
   bbb8=format(bbb*(3/255),,0)
С уважением, Алексей.

Последний раз редактировалось tae1980; 11.10.2019 в 11:36.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Палитра Екатерина20 Мультимедиа в Delphi 26 24.05.2012 20:35
Палитра RGB Discovery Microsoft Office Excel 12 11.06.2011 12:04
Палитра _-Re@l-_ Общие вопросы Delphi 8 22.06.2010 11:39
Палитра Win 3.11 )Игнат( Общие вопросы Delphi 3 07.07.2008 08:22