WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Осветлить картинку

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Осветлить картинку
kl опубликован 25-01-2002 13:09 MSK   Click Here to See the Profile for kl   Click Here to Email kl  
Подскажите как бы поэффективнее осветлить картинку средствами CDC? Не хочется перебирать каждый пиксел...
Rechkin опубликован 27-01-2002 12:49 MSK     Click Here to See the Profile for Rechkin  Click Here to Email Rechkin     
Вопрос конечно глупый -
А что есть CDC?
Glite опубликован 27-01-2002 03:19 MSK     Click Here to See the Profile for Glite  Click Here to Email Glite     
Попробуй FloodFill или ExtFloodFill
DmitryRyvkin опубликован 27-01-2002 04:22 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
Вопрос совсем неглупый. Только у CDC есть выбранный в его контекст битмэп. Вот к нему то и нужно получить доступ. MFC не дает попиксельного доступа, но можно получить адресс буфера байтиков. Вот отсюда и пляши.
michl_m опубликован 27-01-2002 12:03 MSK     Click Here to See the Profile for michl_m  Click Here to Email michl_m     
Если я правильно понял, ты хочешь сделать, как в FotoShop. Т.е цветокоррекция. Вроде панельки "яркость, контрастность, гамма".
Посему ответ - кроме как попиксельно, другого пути нет. Это математика. Не очень сложная, но нестандартная.
Каждая точка - цвет. Предположим, RGB. Простейшее - для каждой точки изменить цвет на R+n1, G+n2, B+n3. Можно n1=n2=n3. Только с контролем диапазона: 255 >= R >= 0, например. Только для больших n1,n2,n3 вся картинка может стать черной или белой. Поэтому применяют нелинейные функции.
kl опубликован 28-01-2002 09:26 MSK     Click Here to See the Profile for kl  Click Here to Email kl     
Я сначала и сделал как предлагал michl_m. Но сильно заметны искажения. Почитав MSDN я увидел функции UpdateColors, SetColorAdjustment. Может с их помощью можно?
К сведению DmitryRyvkin попиксельный доступ MFC позволяет..:)
michl_m опубликован 28-01-2002 13:32 MSK     Click Here to See the Profile for michl_m  Click Here to Email michl_m     
2kl.
Я же предупреждал, и не зря написал n1, n2, n3.
Поясняю. Например, открываем на Desktop окно Properties->Appearance. В общем окошко, позволяющее менять цвета элементов Windows (Desktop, Window title, ...). Открываем Color->Other. В общем, я к тому, чтобы открыть стандартный диалог Сolor change. Теперь посмотрим, что происходит.
Выберем любой цвет. Например, левый верхний. У меня он розовый, RGB = 255,128,128.
Теперь справа ползунком начинаем его осветлять. Заметь тенденцию изменения значений RGB! Компонента Red не меняется долгое время, изменяются только Green и Blue.
Так что осветление без искажения гаммы - дело непростое.
Еще пример - выбери зеленый. Там есть цвет RGB = 0,128,0. Двигаем стрелку - меняется только Green. Цвет остается зеленым разной степени яркости.
В общем, лобового решения этой проблемы нет.
DmitryRyvkin опубликован 28-01-2002 13:58 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
2kl
Да я знаю что позволяет , вызывает API GetPixel. Но вы посмотрите на скорость работы таким макаром и все поймете. К сведению kl работа с пикселями в VCL организована напрямую через память битмэпа, скорость куда лучше.
kl опубликован 28-01-2002 14:53 MSK     Click Here to See the Profile for kl  Click Here to Email kl     
Всем спасибо!

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.