转换一批.bmp 文件为 .jpg
unit BMP2JPG_Unit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ,jpeg, ComCtrls, filectrl, Menus;
type
TForm1 = class(TForm)
SourceB: TButton;
Source: TLabel;
Target: TLabel;
targetB: TButton;
ConvertB: TButton;
CQ: TTrackBar;
CQL: TLabel;
ListBox: TListBox;
BRB: TButton;
NOW: TCheckBox;
Button1: TButton;
USD: TCheckBox;
StatusBar: TStatusBar;
Label1: TLabel;
Label2: TLabel;
PopupMenu1: TPopupMenu;
Addfiles1: TMenuItem;
Remove1: TMenuItem;
Convertthis1: TMenuItem;
Batchrun1: TMenuItem;
Removeall1: TMenuItem;
procedure SourceBClick(Sender: TObject);
procedure targetBClick(Sender: TObject);
procedure ConvertBClick(Sender: TObject);
procedure CQChange(Sender: TObject);
procedure BRBClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Addfiles1Click(Sender: TObject);
procedure Batchrun1Click(Sender: TObject);
procedure Convertthis1Click(Sender: TObject);
procedure Remove1Click(Sender: TObject);
procedure ListBoxClick(Sender: TObject);
procedure Removeall1Click(Sender: TObject);
private
{ Private declarations }
outputdir:string;
total:word;
public
{ Public declarations }
procedure bmp2jpg(FromBMP,ToJPG:string;Quality:byte);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SourceBClick(Sender: TObject);
var op:topendialog; count:integer;
begin
op:=topendialog.Create(nil);
op.Options:=[ofAllowMultiSelect,ofReadOnly,ofPathMustExist,ofFileMustExist];
op.Filter:='*.bmp|*.bmp';
op.Execute;
if op.Files.Count>0 then
begin
listbox.Items.AddStrings(op.Files);
source.Caption:=listbox.Items[0];
total:=listbox.Items.Count;
statusbar.Panels[0].Text:='Total file '+inttostr(total);
end;
op.Free;
end;
procedure TForm1.targetBClick(Sender: TObject);
var op:tsavedialog;
begin
op:=tsavedialog.Create(nil);
op.Options:=[ofReadOnly,ofPathMustExist];
op.DefaultExt:='jpg';
op.Filter:='*.jpg|*.jpg';
op.Execute;
target.Caption:=op.FileName;
op.Free;
end;
procedure TForm1.ConvertBClick(Sender: TObject);
var s:string;
begin
if now.Checked and fileexists(target.Caption) then exit;
statusbar.Panels[0].Text:='Converting...';
statusbar.Panels[1].Text:='Current file :'+extractfilename(source.Caption);
sourceb.Enabled:=false;
targetb.Enabled:=false;
cq.Enabled:=false;
convertb.Enabled:=false;
if not directoryexists(target.Caption) then
begin
s:=source.Caption;
target.Caption:=extractfilepath(s);
s:=extractfilename(s);
s:=copy(s,1,pos('.',s));
target.Caption:=target.Caption+s+'jpg';
end;
bmp2jpg(source.Caption,target.Caption,cq.Position);
sourceb.Enabled:=true;
targetb.Enabled:=true;
cq.Enabled:=true;
convertb.Enabled:=true;
statusbar.Panels[0].Text:='Ready';
statusbar.Panels[1].Text:='';
end;
procedure TForm1.CQChange(Sender: TObject);
begin
cql.Caption:='Compress Qualify '+ inttostr(cq.Position);
end;
procedure TForm1.BRBClick(Sender: TObject);
var count:integer; s:string;
begin
if listbox.Items.Count=0 then exit;
SourceB.Enabled:=false;
TargetB.Enabled:=false;
ConvertB.Enabled:=false;
if BRB.Caption='Cancel' then
begin
BRB.Caption:='Batch Run';
SourceB.Enabled:=true;
TargetB.Enabled:=true;
ConvertB.Enabled:=true;
total:=listbox.Items.Count;
statusbar.Panels[1].Text:='Total file '+inttostr(total);
statusbar.Panels[0].Text:='Total file '+inttostr(total);
end else
BRB.Caption:='Cancel';
for count:=0 to listbox.Items.Count-1 do
begin
S:=listbox.Items[0];
Source.Caption:=s;
if (usd.Checked) or (outputdir='')
then target.Caption:=extractfilepath(s)
else begin
if not directoryexists(outputdir) then exit;
if length(outputdir)=3
then target.Caption:=outputdir
else target.Caption:=outputdir+'\';
end;
s:=extractfilename(s);
s:=copy(s,1,pos('.',s));
target.Caption:=target.Caption+s+'jpg';
if now.Checked and fileexists(target.Caption) then continue;
Application.ProcessMessages;
if BRB.Caption='Batch Run' then exit;
statusbar.Panels[0].Text:='Converting...'+' ('+inttostr(count+1)+'/'+inttostr(total)+')';
statusbar.Panels[1].Text:='Current file :'+extractfilename(source.Caption);
bmp2jpg(source.Caption,target.Caption,cq.Position);
listbox.Items.Delete(0);
end;
SourceB.Enabled:=true;
TargetB.Enabled:=true;
ConvertB.Enabled:=true;
BRB.Caption:='Batch Run';
statusbar.Panels[0].Text:='Ready';
statusbar.Panels[1].Text:='';
end;
procedure TForm1.bmp2jpg(FromBMP, ToJPG: string;Quality:byte);
var jpg:tjpegimage;bmp:tbitmap;
begin
if not fileexists(FromBMP) then exit;
try
bmp:=tbitmap.Create;
bmp.LoadFromFile(FromBMP);
jpg:=tjpegimage.Create;
jpg.Assign(bmp);
jpg.CompressionQuality:=Quality;
jpg.Compress;
jpg.SaveToFile(ToJPG);
finally
bmp.Free;
jpg.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
cql.Caption:='Compress Qualify '+ inttostr(cq.Position);
outputdir:='';
statusbar.Panels[0].Text:='Ready';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
selectdirectory('Select a output directory','',outputdir);
target.caption:=outputdir;
if directoryexists(outputdir)
then usd.Checked:=true
else usd.Checked:=false;
end;
procedure TForm1.Addfiles1Click(Sender: TObject);
begin
SourceBClick(nil);
end;
procedure TForm1.Batchrun1Click(Sender: TObject);
begin
BRBClick(nil);
end;
procedure TForm1.Convertthis1Click(Sender: TObject);
begin
ConvertBClick(nil);
end;
procedure TForm1.Remove1Click(Sender: TObject);
begin
Listbox.DeleteSelected;
statusbar.Panels[0].Text:='Total file '+inttostr(total);
end;
procedure TForm1.ListBoxClick(Sender: TObject);
begin
if listbox.SelCount>0 then
begin
Source.Caption:=ListBox.Items[Listbox.ItemIndex];
Statusbar.Panels[1].Text:='Current select file '+Extractfilename(Source.Caption);
end;
end;
procedure TForm1.Removeall1Click(Sender: TObject);
begin
listbox.Clear;
statusbar.Panels[0].Text:='Ready';
end;
end.