将多张图片合并为一张大图片

    类似拼图游戏中,我们常常要将多张图片拼成一张图片。这些小图片的特征类似:宽,高每张都相等。

Delphi 7代码如下:

program Gigsaw;

{$APPTYPE CONSOLE}

uses
  SysUtils,jpeg,Graphics;

var
i,j:integer;
jp: TJPEGImage;
bmp_t, bmp: TBitmap;
sfile,sDir:string;
y,yMax,xMax: Integer;

begin
   for i:= 0 to ParamCount do
    writeln(paramStr(i));
  if ParamCount < 4 then
  begin
    writeln('参数总数少于4,程序即将退出!');
    writeln('usage:' + paramStr(0) + ' [列图片个数] [图片目录] [合并后名字] [图片1] [图片2] ...');
    readln;
    exit;
  end;
  //第一个参数,一列图片个数
  //第二个参数,图片所在的目录
  //第三个参数, 合并后图片的名字(将保存在上述目录)
  //第四个至第N个参数,小图片的名字



  try
  sDir  := paramStr(2);
  sfile := paramStr(3);
  jp := TJPEGImage.Create;
  bmp := TBitmap.Create;
  bmp.PixelFormat:=pf32bit;
  bmp_t := TBitmap.Create;
  bmp_t.PixelFormat:=pf24bit;
  bmp.Width:=0;
  bmp.Height:=0;
  j:=0;
  yMax := strtoint(paramStr(1)) -1 ;
  xMax := (ParamCount - 3) div yMax;
  jp.LoadFromFile(sDir + paramStr(4));
  for i:=0 to yMax -1 do
    bmp.Height := bmp.Height+jp.Height;
  bmp.Width := jp.Width * xMax;


  i:= 4;
  while i <=  ParamCount do
  begin
    j := 0 ;
    for y:= 0 to yMax -1 do
    begin
      jp.LoadFromFile(sDir + paramStr(i));
      bmp_t.Assign(jp);
      bmp.Transparent := true;
      bmp.Canvas.Draw( (i-4) div (yMax) * jp.Width, j, bmp_t);
      j:=j+jp.Height;
      inc(i);

      if i > ParamCount then
        break;
    end;

  end;



  jp.Assign(bmp);

  jp.SaveToFile(sDir + sfile);

  bmp.Free;
  bmp_t.Free;
  jp.Free;
  Writeln('Done!!');
  except
   on e: Exception do
      begin
        writeln('exception occured:' + E.Message);
        readln;
      end;
   end;

end.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值