📄 unit1.pas
字号:
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 + -