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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2012, 18:52   #1
Lost_Angel
 
Регистрация: 28.03.2012
Сообщений: 8
По умолчанию Яркость и контрастность

Добрый вечер!
Нужно каким-то макаром обращаться к каждому пикселу картинки, загруженной в TImage, изменять его значение и тем самым менять параметры яркости и контрастности изображения..
может кто-нибудь знает как?
Lost_Angel вне форума Ответить с цитированием
Старый 16.04.2012, 17:53   #2
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Код:
Image->Picture->Bitmap->Canvas->Pixels[x][y] = clBlack;
Image->Picture->Bitmap->Canvas->Pixels[x][y] = (TColor)RGB(R,G,B);
выбирайте сами какой метод вам подходит.
Drugnir вне форума Ответить с цитированием
Старый 17.04.2012, 20:26   #3
Lost_Angel
 
Регистрация: 28.03.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Drugnir Посмотреть сообщение
Код:
Image->Picture->Bitmap->Canvas->Pixels[x][y] = clBlack;
Image->Picture->Bitmap->Canvas->Pixels[x][y] = (TColor)RGB(R,G,B);
выбирайте сами какой метод вам подходит.
Ну тут я могу лишь присвоить каждому пикселу значение типа TColor...а это конкретный цвет..
а задачи стоит в том чтобы менять яркость и контрастность изображения.
Имхо нужно менять значения ргб как-нибудь..разве нет?
Lost_Angel вне форума Ответить с цитированием
Старый 17.04.2012, 21:04   #4
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Lost_Angel Посмотреть сообщение
...а это конкретный цвет..
так пиксель - это и есть цветная точка, причем не монохромная, а полихромная. Вот это: (TColor)0x00C0C0C0 серый цвет; старший байт, по моему, интенсивность, дальше синий - зеленый - красный. Придумайте (или в инете отыщите) в каких пропорциях менять эти составляющие, вот и будет управление яркостью (нули - это черный цвет, 0x00FFFFFF - белый).
nick42 вне форума Ответить с цитированием
Старый 17.04.2012, 22:56   #5
Lost_Angel
 
Регистрация: 28.03.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от nick42 Посмотреть сообщение
так пиксель - это и есть цветная точка, причем не монохромная, а полихромная. Вот это: (TColor)0x00C0C0C0 серый цвет; старший байт, по моему, интенсивность, дальше синий - зеленый - красный. Придумайте (или в инете отыщите) в каких пропорциях менять эти составляющие, вот и будет управление яркостью (нули - это черный цвет, 0x00FFFFFF - белый).
а какой нибудь инкремент для шестнадцатиричных чисел имеется? Вы не в курсе?
Lost_Angel вне форума Ответить с цитированием
Старый 17.04.2012, 23:08   #6
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Я просто не понял, что Вы под этим понимаете...
nick42 вне форума Ответить с цитированием
Старый 17.04.2012, 23:16   #7
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Вот, почитайте, первая ссылка в гугле
http://www.cn.ru/forum/showthread.php?t=223359
А инкремент... Если хотите так, то можно переводить из десятеричной в шестнадцатеричную. Либо составить ассоциативный словарь.

Последний раз редактировалось Drugnir; 17.04.2012 в 23:22.
Drugnir вне форума Ответить с цитированием
Старый 19.04.2012, 21:54   #8
Lost_Angel
 
Регистрация: 28.03.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от nick42 Посмотреть сообщение
Я просто не понял, что Вы под этим понимаете...
К сожалению, Вы ошибаетесь. Сегодня пытался так сделать, учитывая что Tcolor это 0x00C0C0C0 типа что то этого. Узнавал яркость отдельно взятого пикселя, изменял значение и вставлял в значение TColor`а.
Оказалось, что в билдере TColor записывается исключительно в формате РГБ, без какой либо яркости..
вот кстати код:
Код:
void __fastcall TForm1::TrackBar4Change(TObject *Sender)
{
  HDC DC;
  unsigned  luminosity;
  byte x,y;
  TColor Color,col;
  float R,G,B;
  int xx,xx1,xx2,xx3;
  xx=TrackBar4->Position;
  DC=Image2->Canvas->Handle;

  for (y=0;y<Image1->Height;y++){
  for (x=0;x<Image1->Width;x++){

  Color=Image2->Picture->Bitmap->Canvas->Pixels[x][y];

  luminosity=(GetRValue(Color)*77+GetRValue(Color)*151+GetBValue(Color)*28)>>8;// определение значения яркости
  luminosity=luminosity+xx;//изменение значения яркости в зависимости от ползунка
  luminosity<<=24;// сдвиг
  Color=Color&8388607;// накладываем маску
  Color=Color+luminosity;// записываем в старший байт новое значение яркости
  SetPixel(DC,x,y,Color);
  }
  }
  Image2->Visible=true;
  Image2->Refresh();
}
Lost_Angel вне форума Ответить с цитированием
Старый 26.04.2012, 09:42   #9
рихард
Новичок
Джуниор
 
Регистрация: 19.04.2012
Сообщений: 1
По умолчанию

клас мне помагло )))
рихард вне форума Ответить с цитированием
Старый 26.04.2012, 10:02   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
в формате РГБ, без какой либо яркости..
google to Цветовые модели и их соответствие

RGB to HSL to RGB
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
яркость монитора nyx Операционные системы общие вопросы 2 17.05.2010 08:40
Прозрачность и контрастность Кронос Мультимедиа в Delphi 1 05.07.2009 18:43
яркость резкость контрастность Илья PHoeNiX Общие вопросы Delphi 1 08.06.2008 23:04
Яркость пиксела -=<[Evklidd]>=- Мультимедиа в Delphi 4 02.02.2008 12:24