Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 686

•  TDictionary Custom Sort  6 692

•  Fast Watermark Sources  6 471

•  3D Designer  9 408

•  Sik Screen Capture  6 811

•  Patch Maker  7 229

•  Айболит (remote control)  7 207

•  ListBox Drag & Drop  6 052

•  Доска для игры Реверси  97 693

•  Графические эффекты  7 379

•  Рисование по маске  6 682

•  Перетаскивание изображений  5 533

•  Canvas Drawing  5 923

•  Рисование Луны  5 676

•  Поворот изображения  5 150

•  Рисование стержней  3 745

•  Paint on Shape  2 937

•  Генератор кроссвордов  3 862

•  Головоломка Paletto  3 082

•  Теорема Монжа об окружностях  3 894

•  Пазл Numbrix  2 561

•  Заборы и коммивояжеры  3 321

•  Игра HIP  2 282

•  Игра Go (Го)  2 189

•  Симулятор лифта  2 592

•  Программа укладки плитки  2 195

•  Генератор лабиринта  2 701

•  Проверка числового ввода  2 350

•  HEX View  2 681

•  Физический маятник  2 347

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Изменение контрастности изображения



Автор: Fenik

{ **** 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;




Похожие по теме исходники

Изменение цвета изображения

TGIFImage (GIF изображения)

Поворот изображения




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте