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

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

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.

 

你可能感兴趣的:(Gigsaw)