Delphi实现三张图片合成

这篇博客讲述了如何在Delphi环境下实现三张图片的合成,并在合成后对图片进行压缩。通过创建TBitMap对象,将三个图像分别赋值,然后合并到一起。如果选中CheckBox2,则在合成的图片上叠加当前时间。接着,使用TMemoryStream和自定义的CompressBitmap过程对图像进行压缩并保存。最后,根据CheckBox1的选中状态决定是否删除源图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值