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

📄 unit1.pas

📁 图象处理的一些相关内容 不是很难的,实现简单,希望对大家有帮助
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls,jpeg,unit3, StdCtrls, ComCtrls, ImgList;


type
  TPlugInFilter = procedure(ABmp:Tbitmap); stdcall;

  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Panel1: TPanel;
    Image1: TImage;
    MainMenu1: TMainMenu;
    MenuFile: TMenuItem;
    MenuAdjust: TMenuItem;
    MenuRGBChange: TMenuItem;
    MenuGray: TMenuItem;
    MenuGrayAverage: TMenuItem;
    MenuGrayWeightAverage: TMenuItem;
    MenuBrightness: TMenuItem;
    MenuContrastAdd: TMenuItem;
    MenuEffect: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    rd1: TMenuItem;
    N9: TMenuItem;
    N11: TMenuItem;
    N21: TMenuItem;
    N22: TMenuItem;
    N31: TMenuItem;
    N41: TMenuItem;
    N51: TMenuItem;
    N61: TMenuItem;
    N71: TMenuItem;
    N81: TMenuItem;
    N91: TMenuItem;
    N101: TMenuItem;
    N111: TMenuItem;
    N121: TMenuItem;
    N131: TMenuItem;
    N141: TMenuItem;
    N151: TMenuItem;
    N161: TMenuItem;
    N171: TMenuItem;
    N181: TMenuItem;
    N191: TMenuItem;
    N201: TMenuItem;
    StatusBar1: TStatusBar;
    N10: TMenuItem;
    MenuEditCancel: TMenuItem;
    ImageListHistory: TImageList;
    MenuSave: TMenuItem;
    MenuSaveAs: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    N18: TMenuItem;
    N19: TMenuItem;
    SaveDialog1: TSaveDialog;
    MenuItemFilterPlugIn: TMenuItem;
    procedure MenuRGBChangeClick(Sender: TObject);
    procedure MenuFileClick(Sender: TObject);
    procedure MenuBrightnessClick(Sender: TObject);
    procedure MenuClickOtherEffect(Sender: TObject);
    procedure MenuClickAdjust(Sender: TObject);
    procedure MenuClickFilter(Sender: TObject);

    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure MenuFileOpenClick(Sender: TObject);
    procedure MenuEditCancelClick(Sender: TObject);

    procedure MenuContrastChange(Sender: TObject);
    procedure N19Click(Sender: TObject);
    procedure MenuSaveClick(Sender: TObject);
    procedure MenuSaveAsClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure N16Click(Sender: TObject);

  private
    //FOldBmp:Tbitmap;
    FCurOperationTimes:integer;
    FileName:string;

    procedure LoadPlugins;
    procedure MenuItemPlugInClick(Sender: TObject);

    { Private declarations }
  public
    ProgressBar1:TProgressBar;
    IsImageChanged:boolean;

    StringListPlugInDll:TStringList;
    StringListFilterFunctionName:TStringList;
    function LoadImage(const InputImageFileName:string):boolean;

    { Public declarations }
  end;


  procedure JpgToBmp(const JpgFileName:string;AJpg:TJpegImage;Abmp:Tbitmap);
  function  IsJpgFile(const FileName:string):boolean;


var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}



//转换jpg到bmp
procedure JpgToBmp(const JpgFileName:string;AJpg:TJpegImage;Abmp:Tbitmap);
begin
  try
    AJpg.LoadFromFile(JpgFileName);
    Abmp.Assign(AJpg);
  finally
  end;
end;

//仅从扩展名上来判断是否是jpg格式的文件
function  IsJpgFile(const FileName:string):boolean;
begin
  result:=(LowerCase( ExtractFileExt(FileName))='.jpg') or (LowerCase( ExtractFileExt(FileName))='.jpeg');
end;

function TForm1.LoadImage(const InputImageFileName: string):boolean;
var
  Bmp:Tbitmap;
  jpg:Tjpegimage;
  h:integer;
  w:integer;
begin
  jpg:=nil;
  bmp:=Tbitmap.Create;
  bmp.PixelFormat:=pf24bit;
  //FOldBmp:=Tbitmap.Create;
  //FOldBmp.PixelFormat:=pf24bit;

  if IsJpgFile(InputImageFileName) then
  begin
    jpg:=Tjpegimage.Create;
    JpgToBmp(InputImageFileName,Jpg,bmp);
  end
  else
    Bmp.LoadFromFile(InputImageFileName);

  //FOldBmp.Assign(bmp);

  image1.Visible:=false;
  image1.AutoSize:=false;
  image1.Stretch:=true;
  Image1.Picture.Bitmap.PixelFormat:=pf24bit;
  Image1.Picture.Bitmap.Assign(bmp);

  h:=ScrollBox1.Height-8;
  w:=ScrollBox1.Width;
  if (Bmp.Width<=h) and (Bmp.Height<=h) then
  begin
    Image1.Height:=Bmp.Height;
    Image1.Width:=Bmp.Width;
  end

  else if Bmp.Height>=Bmp.Width then
  begin

    image1.Height:=h;
    image1.Width:=image1.Height*Bmp.Width div Bmp.Height;

    image1.Stretch:=true;
  end

  else if Bmp.Width>Bmp.Height then
  begin

    image1.Width:=h;
    image1.Height:=image1.Width*Bmp.Height div Bmp.Width;


  end;

  panel1.Width:=image1.Width;
  panel1.Height:=image1.Height;
  image1.Left:=0;
  image1.Top:=0;

  panel1.Top:=(h-panel1.Height)div 2;
  panel1.Left:=(w-panel1.Width)div 2;

  image1.Visible:=true;

  if assigned(jpg) then
  begin
    jpg.Free;
    jpg:=nil;
  end;
  bmp.Free;
end;

procedure TForm1.MenuRGBChangeClick(Sender: TObject);
begin
  if Image1.Picture.Bitmap.Height=0 then exit;
 //ProgressBar1.Visible:=true;
  form2.LoadImage(Image1.Picture.Bitmap);

  form2.GroupBoxBrightnessChange.Visible:=false;
  form2.GroupBoxSaturationChange.Visible:=false;
  form2.GroupBoxRGBChange.Visible:=true;
  form2.Caption:='RGB调整';
  form2.ShowModal;
end;

procedure TForm1.MenuFileClick(Sender: TObject);
begin
//  LoadImage('c:\3.bmp');

end;

procedure TForm1.MenuBrightnessClick(Sender: TObject);
begin
  if Image1.Picture.Bitmap.Height=0 then exit;
  form2.LoadImage(Image1.Picture.Bitmap);

  form2.GroupBoxRGBChange.Visible:=false;
  form2.GroupBoxSaturationChange.Visible:=false;
  form2.GroupBoxBrightnessChange.Visible:=true;

  form2.Caption:='亮度调整';
  form2.ShowModal;

//
end;

procedure TForm1.MenuClickOtherEffect(Sender: TObject);
var
  EffectIndex:integer;

begin

  if (Sender is TMenuItem) then
  EffectIndex:= TMenuItem(Sender).tag ;
  if Image1.Picture.Bitmap.Height=0 then exit;
  ProgressBar1.Visible:=true;
  OtherEffect(Image1.Picture.Bitmap,EffectIndex,ProgressBar1);
  ProgressBar1.Visible:=false;

  form1.IsImageChanged:=true;
  self.Image1.Repaint;
  self.Repaint;

//
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
begin
  ProgressBar1:=TProgressBar.Create(self);
  ProgressBar1.Parent:=StatusBar1;
  ProgressBar1.Visible:=false;
  ProgressBar1.Width:=400;
  ProgressBar1.Height:=StatusBar1.Height-4;
  ProgressBar1.Left:=StatusBar1.Width-ProgressBar1.Width;
  ProgressBar1.Top:=2;

  FCurOperationTimes:=0;
  if ParamCount>0 then
  begin
    //showmessage(ParamStr(1));
    FileName:=ParamStr(1);
    for i:=1 to length(FileName) do
    if FileName[i]='?' then FileName[i]:=#32;

    if (FileExists(FileName)) and ( (LowerCase(ExtractFileExt(FileName ))='.bmp')
    or (LowerCase(ExtractFileExt(FileName))='.jpg')
    or (LowerCase(ExtractFileExt(FileName))='.jpeg') ) then
    LoadImage(FileName);
  end;

  IsImageChanged:=false;

  StringListPlugInDll:=TStringList.Create;
  StringListFilterFunctionName:=TStringList.Create;

  LoadPlugins;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  //FOldBmp.Free;
  ProgressBar1.free;
  StringListPlugInDll.Free;
  StringListFilterFunctionName.Free;
end;

procedure TForm1.MenuClickAdjust(Sender: TObject);
begin
  if not (Sender is TMenuItem) then exit;
  if Image1.Picture.Bitmap.Height=0 then exit;
  ProgressBar1.Visible:=true;
  case TMenuItem(Sender).tag  of
    //平均灰度化
    0:GrayAverage(Image1.Picture.Bitmap,ProgressBar1);

    //加权平均灰度化
    1:GrayWeightAverage(Image1.Picture.Bitmap,ProgressBar1);
  end; //end case
  ProgressBar1.Visible:=false;

  IsImageChanged:=true;
  self.Image1.Repaint;
  self.Repaint;
end;


procedure TForm1.MenuClickFilter(Sender: TObject);
begin
  if not (Sender is TMenuItem) then exit;
  if Image1.Picture.Bitmap.Height=0 then exit;
  ProgressBar1.Visible:=true;
  case TMenuItem(Sender).tag  of
    0:NotColor(Image1.Picture.Bitmap,ProgressBar1);
    1:Exposure(Image1.Picture.Bitmap,ProgressBar1);
    2:Emboss(Image1.Picture.Bitmap,ProgressBar1);
    3:Engrave(Image1.Picture.Bitmap,ProgressBar1);
    4:begin
        if (LowerCase(ExtractFileExt(FileName))='.jpg')
        or (LowerCase(ExtractFileExt(FileName))='.jpeg')  then
        begin
          showmessage('此功能对于jpg格式的文件尚存在bug!');
          exit;
        end;
        Blur(Image1.Picture.Bitmap,ProgressBar1);
      end;
    5:Sharpen(Image1.Picture.Bitmap,ProgressBar1);
    6:Purple(Image1.Picture.Bitmap,ProgressBar1);

⌨️ 快捷键说明

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