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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 00:27   #1
pavellyba
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 84
Злость Увеличить яркость картинки

Как можно увеличить яркость картинки в элементе TImage
pavellyba вне форума Ответить с цитированием
Старый 10.04.2011, 00:35   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Попиксельная коррекция цвета, например.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 10.04.2011, 00:52   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

решение в лоб:

Код:
procedure TForm1.Button1Click(Sender: TObject);
type
  tpixel = packed record r, g, b: byte; end;

  procedure adjust(var c: byte; factor: double);
  var
    r: double;
  begin
    r := c * factor;
    if (r > 255) then
      r := 255;
    //
    c := trunc(r);
  end;

var
  x, y, h, w: Integer;
  tc: TColor;
  p: tpixel absolute tc;
  factor: double;
begin
  with Image1.Canvas do begin
    //
    factor := 1.5;
    //
    Lock();
    try
      h := Height;
      w := Width;
      for x := 0 to w - 1 do
        for y := 0 to h - 1 do begin
          //
          tc := Pixels[x, y];
          adjust(p.r, factor);
          adjust(p.g, factor);
          adjust(p.b, factor);
          //
          Pixels[x, y] := tc;
        end;
    finally
      Unlock();
    end;
  end;
end;
через сканлайны будет быстрее, но там ещё на формат цвета нужно смотреть
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 10.04.2011, 17:12   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

вариант со сканлайн (трёхбайтный цвет):

Код:
procedure TForm1.Button1Click(Sender: TObject);
type
  tpixel = packed record r, g, b: byte; end;

  procedure adjust(var c: byte; factor: double);
  var
    r: double;
  begin
    r := c * factor;
    if (r > 255) then
      r := 255;
    //
    c := trunc(r);
  end;

var
  x, y, h, w: Integer;
  p: ^tpixel;
  factor: double;
begin
  factor := 1.5;
  h := Image1.Picture.Height;
  w := Image1.Picture.Width;
  for y := 0 to h - 1 do begin
    //
    p := Image1.Picture.Bitmap.ScanLine[y];
    for x := 0 to w - 1 do begin
      //
      adjust(p.r, factor);
      adjust(p.g, factor);
      adjust(p.b, factor);
      inc(p);
    end;
  end;
  //
  Image1.Repaint();
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.04.2011, 16:35   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

http://programmersforum.ru/showthread.php?t=21326
asmodey1 вне форума Ответить с цитированием
Ответ


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



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