⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit3.pas

📁 图象处理的一些相关内容 不是很难的,实现简单,希望对大家有帮助
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    dec(integer(SrcRow), ScanlineBytes);
  AProgressBar.Position:=i;
  end;

end;


//曝光
procedure Exposure(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
begin
  AProgressBar.Max:=SrcBmp.Height - 1;
  for i := 0 to SrcBmp.Height - 1 do
  begin
    SrcRow := SrcBmp.ScanLine[i];
    //DestRow := DestBmp.ScanLine[i];

      // for each pixel in row
    for j := 0 to SrcBmp.Width - 1 do
    begin
        // add brightness value to pixel's RGB values
          // RGB values must be less than 256
        if SrcRow[j].rgbtRed<128 then
        SrcRow[j].rgbtRed :=not SrcRow[j].rgbtRed ;

        if SrcRow[j].rgbtGreen<128 then
        SrcRow[j].rgbtGreen :=not SrcRow[j].rgbtGreen;

        if SrcRow[j].rgbtBlue<128 then
        SrcRow[j].rgbtBlue :=not SrcRow[j].rgbtBlue;
    end;
    AProgressBar.Position:=i;
  end;
end;

//浮雕
procedure Emboss(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
  SrcNextRow:pRGBArray;
  Value:integer;
begin
  AProgressBar.Max:=SrcBmp.Height - 2;
  for i := 0 to SrcBmp.Height - 2 do
  begin
    SrcRow := SrcBmp.ScanLine[i];
    SrcNextRow:=SrcBmp.ScanLine[i+1];
    //DestRow := DestBmp.ScanLine[i];

      // for each pixel in row
    for j := 0 to SrcBmp.Width - 1 do
    begin
        // add brightness value to pixel's RGB values
          // RGB values must be less than 256
        Value:=SrcRow[j].rgbtRed-SrcNextRow[j+1].rgbtRed+128;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtRed:=value;

        Value:=SrcRow[j].rgbtGreen -SrcNextRow[j+1].rgbtGreen+128;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtGreen:=value;

        Value:=SrcRow[j].rgbtBlue-SrcNextRow[j+1].rgbtBlue+128;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtBlue:=value;

    end;
    AProgressBar.Position:=i;
  end;
end;

//雕刻
procedure Engrave(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
  SrcNextRow:pRGBArray;
  Value:integer;
begin
  AProgressBar.Max:=SrcBmp.Height - 2;
  for i := 0 to SrcBmp.Height - 2 do
  begin
    SrcRow := SrcBmp.ScanLine[i];
    SrcNextRow:=SrcBmp.ScanLine[i+1];
    //DestRow := DestBmp.ScanLine[i];

      // for each pixel in row
    for j := 0 to SrcBmp.Width - 1 do
    begin
        // add brightness value to pixel's RGB values
          // RGB values must be less than 256
        Value:=SrcNextRow[j+1].rgbtRed-SrcRow[j].rgbtRed+128;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtRed:=value;

        Value:=SrcNextRow[j+1].rgbtGreen-SrcRow[j].rgbtGreen+128;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtGreen:=value;

        Value:=SrcNextRow[j+1].rgbtBlue-SrcRow[j].rgbtBlue+128;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtBlue:=value;

    end;
    AProgressBar.Position:=i;
  end;
end;

//模糊
procedure Blur(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
  SrcNextRow:pRGBArray;
  SrcPreRow:pRGBArray;
  Value:integer;
begin

  AProgressBar.Max:=SrcBmp.Height - 2;
  for i := 1 to SrcBmp.Height - 2 do
  begin
    SrcRow := SrcBmp.ScanLine[i];
    SrcPreRow:=SrcBmp.ScanLine[i-1];

    SrcNextRow:=SrcBmp.ScanLine[i+1];
    //DestRow := DestBmp.ScanLine[i];

      // for each pixel in row
    for j := 1 to SrcBmp.Width - 1 do
    begin
        // add brightness value to pixel's RGB values
          // RGB values must be less than 256
      Value:=(SrcPreRow[j-1].rgbtRed+SrcRow[j-1].rgbtRed+SrcNextRow[j-1].rgbtRed+
             SrcPreRow[j].rgbtRed+SrcRow[j].rgbtRed+SrcNextRow[j].rgbtRed+
             SrcPreRow[j+1].rgbtRed+SrcRow[j+1].rgbtRed+SrcNextRow[j+1].rgbtRed)div 9;

      SrcRow[j].rgbtRed:=value;

      Value:=(SrcPreRow[j-1].rgbtGreen+SrcRow[j-1].rgbtGreen+SrcNextRow[j-1].rgbtGreen+
             SrcPreRow[j].rgbtGreen+SrcRow[j].rgbtGreen+SrcNextRow[j].rgbtGreen+
             SrcPreRow[j+1].rgbtGreen+SrcRow[j+1].rgbtGreen+SrcNextRow[j+1].rgbtGreen)div 9;

      SrcRow[j].rgbtGreen:=value;


      Value:=(SrcPreRow[j-1].rgbtBlue+SrcRow[j-1].rgbtBlue+SrcNextRow[j-1].rgbtBlue+
             SrcPreRow[j].rgbtBlue+SrcRow[j].rgbtBlue+SrcNextRow[j].rgbtBlue+
             SrcPreRow[j+1].rgbtBlue+SrcRow[j+1].rgbtBlue+SrcNextRow[j+1].rgbtBlue)div 9;

      SrcRow[j].rgbtBlue:=value;


    end;
    AProgressBar.Position:=i;
  end;
end;

//锐化
procedure Sharpen(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
  SrcPreRow:pRGBArray;
  Value:integer;
begin
  AProgressBar.Max:=SrcBmp.Height - 1;
  for i := 1 to SrcBmp.Height - 1 do
  begin
    SrcRow := SrcBmp.ScanLine[i];
    SrcPreRow:=SrcBmp.ScanLine[i-1];
    //DestRow := DestBmp.ScanLine[i];

      // for each pixel in row
    for j := 0 to SrcBmp.Width - 1 do
    begin
        // add brightness value to pixel's RGB values
          // RGB values must be less than 256
        Value:=SrcRow[j].rgbtRed+(SrcRow[j].rgbtRed-SrcPreRow[j-1].rgbtRed)div 2;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtRed:=value;

        Value:=SrcRow[j].rgbtGreen+(SrcRow[j].rgbtGreen-SrcPreRow[j-1].rgbtGreen)div 2;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtGreen:=value;

        Value:=SrcRow[j].rgbtBlue+(SrcRow[j].rgbtBlue-SrcPreRow[j-1].rgbtBlue)div 2;
        Value:=Max(0,Value);
        Value:=Min(255,Value);
        SrcRow[j].rgbtBlue:=value;

    end;
    AProgressBar.Position:=i;
  end;
end;

//紫色滤镜
procedure Purple(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
  ScanlineBytes:integer;
begin
  ScanlineBytes:=SrcBmp.Width*3;

  SrcRow := SrcBmp.ScanLine[0];

  AProgressBar.Max:=SrcBmp.Height - 1;
  for i := 0 to SrcBmp.Height - 1 do
  begin
    for j := 0 to SrcBmp.Width - 1 do
    begin
        SrcRow[j].rgbtRed :=(SrcRow[j].rgbtGreen+SrcRow[j].rgbtRed)div 2;
        SrcRow[j].rgbtGreen :=(SrcRow[j].rgbtBlue+SrcRow[j].rgbtGreen)div 2;
        SrcRow[j].rgbtBlue :=(SrcRow[j].rgbtRed+SrcRow[j].rgbtBlue)div 2;
    end;

    dec(integer(SrcRow), ScanlineBytes);
    AProgressBar.Position:=i;

  end;
end;

procedure Spooky(SrcBmp:Tbitmap;AProgressBar:TProgressBar);
var
  i, j: integer;
  SrcRow: pRGBArray;
  ScanlineBytes:integer;
begin
  ScanlineBytes:=SrcBmp.Width*3;

  SrcRow := SrcBmp.ScanLine[0];
  AProgressBar.Max:=SrcBmp.Height - 1;
  for i := 0 to SrcBmp.Height - 1 do
  begin
    for j := 0 to SrcBmp.Width - 1 do
    begin
    //    SrcRow[j].rgbtRed :=(SrcRow[j].rgbtGreen+SrcRow[j].rgbtRed)div 2;
        SrcRow[j].rgbtGreen :=(SrcRow[j].rgbtRed+SrcRow[j].rgbtGreen)div 2;
        SrcRow[j].rgbtBlue :=(SrcRow[j].rgbtRed+SrcRow[j].rgbtBlue)div 2;
    end;

    dec(integer(SrcRow), ScanlineBytes);
    AProgressBar.Position:=i;

  end;
end;
procedure OtherEffect(SrcBmp:Tbitmap;EffectIndex:integer;AProgressBar:TProgressBar);
var
  i, j: integer;
  c:integer;
  SrcRow: pRGBArray;
  ScanlineBytes:integer;
begin
  ScanlineBytes:=SrcBmp.Width*3;

  SrcRow := SrcBmp.ScanLine[0];
  AProgressBar.Max:=SrcBmp.Height - 1;
  for i := 0 to SrcBmp.Height - 1 do
  begin
    for j := 0 to SrcBmp.Width - 1 do
    begin
      case EffectIndex of
      0:
        begin
          SrcRow[j].rgbtGreen :=(SrcRow[j].rgbtRed+SrcRow[j].rgbtGreen)div 2;
          SrcRow[j].rgbtRed:=SrcRow[j].rgbtGreen;
          SrcRow[j].rgbtBlue :=trunc(SrcRow[j].rgbtBlue*(arctan(SrcRow[j].rgbtGreen)*2));


        end;

      1:
        begin
          SrcRow[j].rgbtGreen :=(SrcRow[j].rgbtRed+SrcRow[j].rgbtGreen)div 2;
          SrcRow[j].rgbtRed:=SrcRow[j].rgbtGreen;

        end;


      2:
        begin
          SrcRow[j].rgbtRed :=(SrcRow[j].rgbtRed+SrcRow[j].rgbtBlue)div 2;
          SrcRow[j].rgbtBlue:=SrcRow[j].rgbtRed;

        end;


      3:
        begin
          SrcRow[j].rgbtGreen :=(SrcRow[j].rgbtGreen+SrcRow[j].rgbtBlue)div 2;
          SrcRow[j].rgbtBlue:=SrcRow[j].rgbtGreen;

        end;


      4:
        begin
          SrcRow[j].rgbtGreen :=(SrcRow[j].rgbtGreen+SrcRow[j].rgbtBlue)div 2;
          SrcRow[j].rgbtBlue:=SrcRow[j].rgbtGreen;
          SrcRow[j].rgbtRed:=trunc(SrcRow[j].rgbtRed*(arctan(SrcRow[j].rgbtGreen)*2));

        end;
      5:
        begin
          SrcRow[j].rgbtBlue :=(SrcRow[j].rgbtBlue+SrcRow[j].rgbtRed)div 2;
          SrcRow[j].rgbtRed:=SrcRow[j].rgbtBlue;
          SrcRow[j].rgbtGreen:=trunc(SrcRow[j].rgbtGreen*(arctan(SrcRow[j].rgbtRed)*2));

        end;

      6:
        begin
          SrcRow[j].rgbtBlue := trunc(Sin(SrcRow[j].rgbtBlue) * SrcRow[j].rgbtBlue);
          SrcRow[j].rgbtRed := trunc(Sin(SrcRow[j].rgbtRed) * SrcRow[j].rgbtRed);
          SrcRow[j].rgbtGreen := trunc(Sin(SrcRow[j].rgbtGreen) * SrcRow[j].rgbtGreen);


        end;
      7:
        begin
          C := (SrcRow[j].rgbtRed + SrcRow[j].rgbtGreen + SrcRow[j].rgbtBlue) div 12;
          SrcRow[j].rgbtBlue := trunc(Abs(Not (SrcRow[j].rgbtGreen + C)));
          SrcRow[j].rgbtRed := trunc(Abs(Not (SrcRow[j].rgbtBlue + C)));
          SrcRow[j].rgbtGreen := trunc(Abs(Not (SrcRow[j].rgbtRed + C)));

        end;
      8:
        begin
          SrcRow[j].rgbtRed := SrcRow[j].rgbtRed div 2;
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtGreen div 2;
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtRed;


        end;
      9:
        begin
          SrcRow[j].rgbtRed := SrcRow[j].rgbtRed;
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtGreen div 2;
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtRed div 2;

        end;
      10:
        begin
          SrcRow[j].rgbtRed := SrcRow[j].rgbtRed + trunc(Abs(Sin(SrcRow[j].rgbtRed) * 64));
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtGreen + trunc(Abs(Sin(SrcRow[j].rgbtGreen) * 64));
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtBlue + trunc(Abs(Sin(SrcRow[j].rgbtBlue) * 64));

        end;

      11:
        begin
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtGreen;
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtRed;
        end;

      12:
        begin
          SrcRow[j].rgbtRed := SrcRow[j].rgbtGreen;
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtBlue;
        end;
      13:
        begin
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtRed;
          SrcRow[j].rgbtRed := SrcRow[j].rgbtBlue;
        end;
      14:
        begin
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtRed;
          SrcRow[j].rgbtRed := SrcRow[j].rgbtBlue;
        end;
      15:
        begin
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtRed;
        end;
      16:
        begin
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtRed;
        end;
      17:
        begin
          SrcRow[j].rgbtRed := SrcRow[j].rgbtGreen;
        end;
      18:
        begin
          SrcRow[j].rgbtBlue := SrcRow[j].rgbtGreen;
        end;
      19:
        begin
          SrcRow[j].rgbtRed := SrcRow[j].rgbtBlue;
        end;
      20:
        begin
          SrcRow[j].rgbtGreen := SrcRow[j].rgbtBlue;
        end;






      end;//end case
    end;

    dec(integer(SrcRow), ScanlineBytes);
    AProgressBar.Position:=i;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -