类似拼图游戏中,我们常常要将多张图片拼成一张图片。这些小图片的特征类似:宽,高每张都相等。
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.