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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 13:35   #1
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию Как изменять контраст/интенсивность Timage?

Как изменять контраст/гамму Timage? не могу найти ни одного примера. яркость тут у вас нашел, а вот эти два параметра не могу понять как делать.

Последний раз редактировалось eldalex; 21.10.2010 в 15:59.
eldalex вне форума Ответить с цитированием
Старый 21.10.2010, 15:17   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Изменение контрастности изображения
Код:
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Изменение контрастности изображения

Value - значение контрастности на отрезке [-100..100]
Local - если True, то применяется "местный контраст",
если False, то - "общий" (более красивый)

Зависимости: Windows
Автор:       Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright:   Николай Федоровских
Дата:        14 июля 2003 г.
***************************************************** }

procedure Contrast(Bitmap: TBitmap; Value: Integer; Local: Boolean);

  function BLimit(B: Integer): Byte;
  begin
    if B < 0 then
      Result := 0
    else if B > 255 then
      Result := 255
    else
      Result := B;
  end;

var
  Dest: pRGBTriple;
  x, y, mr, mg, mb,
    W, H, tr, tg, tb: Integer;
  vd: Double;

begin
  if Value = 0 then
    Exit;
  W := Bitmap.Width - 1;
  H := Bitmap.Height - 1;
  if Local then
  begin
    mR := 128;
    mG := 128;
    mB := 128;
  end
  else
  begin
    tr := 0;
    tg := 0;
    tb := 0;
    for y := 0 to H do
    begin
      Dest := Bitmap.ScanLine[y];
      for x := 0 to W do
      begin
        with Dest^ do
        begin
          Inc(tb, rgbtBlue);
          Inc(tg, rgbtGreen);
          Inc(tr, rgbtRed);
        end;
        Inc(Dest);
      end;
    end;
    mB := Trunc(tb / (W * H));
    mG := Trunc(tg / (W * H));
    mR := Trunc(tr / (W * H));
  end;
  if Value > 0 then
    vd := 1 + (Value / 10)
  else
    vd := 1 - (Sqrt(-Value) / 10);
  for y := 0 to H do
  begin
    Dest := Bitmap.ScanLine[y];
    for x := 0 to W do
    begin
      with Dest^ do
      begin
        rgbtBlue := BLimit(mB + Trunc((rgbtBlue - mB) * vd));
        rgbtGreen := BLimit(mG + Trunc((rgbtGreen - mG) * vd));
        rgbtRed := BLimit(mR + Trunc((rgbtRed - mR) * vd));
      end;
      Inc(Dest);
    end;
  end;
end;
А что подразумевается под интенсивностью ?
mihali4 вне форума Ответить с цитированием
Старый 21.10.2010, 15:50   #3
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию

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

а за процедурку спасибо большое! то что доктор прописал

Последний раз редактировалось eldalex; 21.10.2010 в 15:53.
eldalex вне форума Ответить с цитированием
Старый 21.10.2010, 18:22   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от eldalex Посмотреть сообщение
я хотел сказать гамму изображения. хотя если честно, я не могу понять чем гамма отличается от яркости
Ну, а что такое градиент, знаете?
Теперь представьте, что вы решили поизвращаться над изображением и сделать на нем траву синей, лица - зеленым, небо - фиолетовым и т.д.
То есть вы задали свою собственную гамму цветов для этого изображения.
mihali4 вне форума Ответить с цитированием
Старый 22.10.2010, 10:42   #5
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

нда... http://ru.wikipedia.org/wiki/Гамма-коррекция
x128 вне форума Ответить с цитированием
Старый 25.10.2010, 07:29   #6
eldalex
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 52
По умолчанию

в общем понятно, что сам я пока маловат, чтоб что то дельное писать...
нашел такой компонент. но не могу установить
что делаю:
1)запускаю delphi7
2)component->install component->into new package
3)выбираю OrImageRegD7.pas
4)в package description вписываю orimage.dpk, жму ок.
делфя говорит что все ок, что ща будем инсталлить и просит подсвердить.
жму ок и выскакивает ошибка компиляции
файл orimage.
[fatal Error] OrImage.pas(1): Program or unit 'OrImage.pas' recursively uses itself

посмотрел OrImage.pas, не нашел такого места, где он сам себя вызывает (если я правильно понял ошибку). кто может подсказать в чем проблема?
непонятно почему ругается на самую первую строку, там вообще комментарий идет...
Вложения
Тип файла: zip orimage.zip (320.9 Кб, 46 просмотров)
eldalex вне форума Ответить с цитированием
Старый 30.10.2010, 16:25   #7
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
uses
  GraphUtils
там все это дело оч хорошо сделано
ZuBy вне форума Ответить с цитированием
Старый 18.09.2011, 15:48   #8
ierecumi
 
Регистрация: 28.05.2010
Сообщений: 9
По умолчанию

я раньше спроцедурами не работал подскажите я то я делаю не так.
Хотел кинуть её на кнопку, прога компелируется без ошибок. Но когда жму на кнопку всё виснет. Кампилятор гаворит что я не инициализировал свою переменную bmp. Что он имеет ввиду?
И как с ним бороться и победить?
Зарание спасибо!!!


procedure TForm1.Button1Click(Sender: TObject);
var
bmp: Tbitmap;
begin
bmp:= Tbitmap.Create;
bmp.LoadFromFile('1.bmp');
image1.canvas.draw(0,0,bmp);
Contrast(bmp, 56, false);
end;
ierecumi вне форума Ответить с цитированием
Старый 20.09.2011, 22:55   #9
ierecumi
 
Регистрация: 28.05.2010
Сообщений: 9
По умолчанию

Я немного изменил код.
но всё равно не фурычит.
Вместо того чтоб изменить картинку, прога делает её невидимой!

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
i:=ScrollBar1.Position;
Contrast(image1.Picture.Bitmap, i, false);
end;
ierecumi вне форума Ответить с цитированием
Старый 20.12.2011, 18:44   #10
Kraven
 
Аватар для Kraven
 
Регистрация: 25.06.2008
Сообщений: 3
По умолчанию

Помогите пожалуйста разобраться, почему неадекватно работает процедура контраста. Использовал код из второго сообщения (собственно этот код и распространен по всему интернету, а толкового описания его нет).
Прикрутил трэкбар для ручной корректировки значения контрастности.
Вложения
Тип файла: rar Contrast.rar (183.8 Кб, 71 просмотров)

Последний раз редактировалось Kraven; 20.12.2011 в 18:49.
Kraven вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вектор как закрытый член класса, как изменять его значения? Zhigool' Общие вопросы C/C++ 3 08.08.2010 23:19
Как изменять атрибуты музыкального файла такие как Исполнитель, Альбом и т.п. TwiX Общие вопросы Delphi 4 22.01.2010 14:48
Существует ли компонент типа TImage, с возможностью изменять основание (прямоугольность) изображения? Лукманов Александр Компоненты Delphi 8 04.05.2009 22:00
цвета, оттенок и контраст Toxa Общие вопросы Delphi 5 13.09.2007 12:04
Как изменять частоту железа?? UnD)eaD)Snake Общие вопросы Delphi 6 30.07.2007 15:06