uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls,StrUtils,Qt,Zlib,JPEG,Math, FileCtrl,initialize;
procedure TF_tphc.Button1Click(Sender: TObject);
type
Tfn=array[0..2]of string;
var i:integer;
s,path:string;
fn:Tfn;
WillbeChangedBmp,TestBmp,ChangedBmp:TBitMap;
CompressStream:TMemoryStream;
begin
WillbeChangedBmp:=TBitMap.Create;
WillbeChangedBmp:=Image1.Picture.Bitmap;
TestBmp:=TbitMap.Create;
TestBmp.Assign(WillbeChangedBmp);
ChangedBmp:=TBitMap.Create;
ChangedBmp:=Image1.Picture.Bitmap;
ChangedBmp.Assign(TestBmp);
WillbeChangedBmp:=Image2.Picture.Bitmap;
TestBmp.Assign(WillbeChangedBmp);
ChangedBmp.Assign(TestBmp);
WillbeChangedBmp:=Image3.Picture.Bitmap;
TestBmp.Assign(WillbeChangedBmp);
ChangedBmp.Assign(TestBmp); //合成???///
//判断是否叠加时间标注
If CheckBox2.Checked = true Then
begin
// Picture1.CurrentY = Picture1.Height - 30?????????//
// Edit3.Visible:=true;
s:=FormatDatetime('yyyy-mm-dd hh:mm:ss',GetFileLastWriteTime(fn[1]));
//Edit3.Text:=s;
end;
Randomize;
//加上随机数,防止重名
s:= FormatDatetime('yyyymmddhhmmss',GetFileLastWriteTime(fn[1]))+IntToStr(random(9) + 1);
Edit3.text:=s;
if DirectoryExists(CurDir+'hc')=false then
begin
CreateDir(CurDir+'hc');
end;
Image1.Picture.SaveToFile(CurDir+'hc/hc.jpg');
path:=Edit2.Text;
If RightBStr(path, 1) <> '/' Then
path:=path + '/';
CompressStream := TMemoryStream.Create;
Try
ChangedBmp.SaveToStream(CompressStream);
CompressBitmap(CompressStream, clDefault);
CompressStream.SaveToFile(CurDir+s+'.BMP');
finally
CompressStream.Free;
end;
If CheckBox1.Checked=true Then
begin
DeleteFile( fn[0]);
DeleteFile( fn[1]);
DeleteFile( fn[2]);
End ;
MessageDlg('图片合成',mtInformation,[mbok],0);
FileListBox1.Refresh;
End;
压缩图像
procedure CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
file://获得图像流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create
(CompressionLevel, DestStream);
Try
file://SourceStream中保存着原始的图像流
CompressedStream.SaveToStream(SourceStream);
file://将原始图像流进行压缩, DestStream中保存着压缩后的图像流
SourceStream.Free;
CompressedStream.Clear;
file://写入原始图像的尺寸
CompressedStream.WriteBuffer(Count, SizeOf
(Count));
file://写入经过压缩的图像流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;