Карта сайтаСсылкиКонтакты

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

PDF Печать
Статьи

Для увеличения или уменьшения контрастности растрового изображения, как только мы получим все значения цвета, преобразуем его в целую переменную, а затем вычтем 128. Результат затем умножается на величину Value. Она передается в качестве переменной в нашу процедуру. Нам не нужно редактировать каждый пиксел по отдельности, мы используем массив, в котором предварительно вычисляются значения цвета.

Во-первых, нужно объявить тип:


type
   TRGBArray = array[0..0] of TRGBTriple;
   pRGBArray = ^TRGBArray;

Далее пишем код:


implementation

{$R *.dfm}

procedure Contrast(const Bitmap: TBitmap; Value: byte);
var
  x,y,k: integer;
  Target,Source: ^TRGBTriple;
  Colorarray: array[0..255] of byte;
  mult: single;
begin
   mult := 1 + Value /100;
   for x := 0 to 255 do
   begin
     k := Round((integer(x) - 128)*mult) + 128;
     if k > 255 then ColorArray[x] := 255
     else
     if k < 0 then ColorArray[x] := 0
     else ColorArray[x] := k;
   end;
   for y := 0 to Bitmap.Height-1 do
   begin
     Target   := Bitmap.ScanLine[y];
     Source := Bitmap.ScanLine[y];
     for x := 0 to (Bitmap.Width-1) do
      begin
       Target^.rgbtRed   := Colorarray[Source^.rgbtRed];
       Target^.rgbtBlue  := Colorarray[Source^.rgbtBlue];
       Target^.rgbtGreen := Colorarray[Source^.rgbtGreen];
       inc(Target);
       inc(Source);
      end;
   end;
end;
{ Пример использования }
procedure TForm1.Button1Click(Sender: TObject);
begin
   Contrast(Image1.Picture.Bitmap,55);
   Image1.Repaint;
end;

 

Добавить комментарий


Защитный код
Обновить