AutoClip
自動で画像をクリッピング
コマンドラインのジャンクツールです。ゲームなどの画面をAtroposなどでクライアント領域を取り込んだときに、画像の上下左右に枠が付いている場合があります。これを自動で取り除いてみようというのがこのツールです。画像の端から横もしくは縦に9割以上同一の色かをチェックし、該当するようであれば枠だと判定してクリッピングを行ないます。
処理したい画像を本ツールのアイコンにドロップして使ってください。コンソールからの使用は考慮していないため、ワイルドカード処理は実装していません。なお、対応している画像形式は、BMPとPNGの2種類だけです。
ソースコード
AutoClipはDelphi7で開発しました。たいしたことをしていませんが、参考にしたい方はご覧になってください。
program AutoClip; (* Copyright (C) S.Kawaida *) {$APPTYPE CONSOLE} uses SysUtils, pngimage, Graphics, Math, Types; const ExtList = '.BMP.PNG'; var lp,slp : Integer; bmp,clip : TBitmap; png : TPNGObject; rl,rt,rb,rr : Integer; FileType : Integer; SrcR,DstR : TRect; function CheckLineH(y:Integer):boolean; var lp,pixel,rep : Integer; MinMatch : Integer; begin MinMatch:=Floor(Int(bmp.Width*0.9)); lp:=0; rep:=1; for lp:=0 to bmp.Width-2 do begin pixel:=bmp.Canvas.Pixels[lp,y]; if (rep>=MinMatch) then Break; if (pixel<>bmp.Canvas.Pixels[lp+1,y]) then begin rep:=1; end else begin Inc(rep); end; end; Result:=(rep<MinMatch); end; function CheckLineV(x:Integer):boolean; var lp,pixel,rep : Integer; MinMatch : Integer; begin MinMatch:=Floor(Int(bmp.Height*0.9)); lp:=0; rep:=1; for lp:=0 to bmp.Height-2 do begin pixel:=bmp.Canvas.Pixels[x,lp]; if (rep>=MinMatch) then Break; if (pixel<>bmp.Canvas.Pixels[x,lp+1]) then begin rep:=1; end else begin Inc(rep); end; end; Result:=(rep<MinMatch); end; begin for lp:=1 to ParamCount do if FileExists(ParamStr(lp)) then begin bmp:=TBitmap.Create; clip:=TBitmap.Create; png:=TPNGObject.Create; try png.CompressionLevel:=9; FileType:=AnsiPos(AnsiUpperCase(ExtractFileExt(ParamStr(lp))),ExtList); case FileType of 1:{BMP} begin bmp.LoadFromFile(ParamStr(lp)); end; 5:{PNG} begin png.LoadFromFile(ParamStr(lp)); bmp.Assign(png); end; end; if (FileType>0) then begin rl:=0; rt:=0; rb:=bmp.Height-1; rr:=bmp.Width-1; for slp:=0 to bmp.Height-1 do begin rt:=slp; if CheckLineH(slp) then Break; end; for slp:=bmp.Height-1 downto 0 do begin rb:=slp; if CheckLineH(slp) then Break; end; for slp:=0 to bmp.Width-1 do begin rl:=slp; if CheckLineV(slp) then Break; end; for slp:=bmp.Width-1 downto 0 do begin rr:=slp; if CheckLineV(slp) then Break; end; end;{of if ImageLoad} if ((rl>0) or (rt>0) or (rr<bmp.Width-1) or (rb<bmp.Height-1)) then begin clip.PixelFormat:=bmp.PixelFormat; clip.Width:=(rr-rl+1); clip.Height:=(rb-rt+1); DstR.Left:=0; DstR.Top:=0; DstR.Right:=clip.Width; DstR.Bottom:=clip.Height; SrcR.Left:=rl; SrcR.Top:=rt; SrcR.Right:=rr+1; SrcR.Bottom:=rb+1; clip.Canvas.CopyRect(DstR,bmp.Canvas,SrcR); bmp.Assign(clip); case FileType of 1:{BMP} begin bmp.SaveToFile(ParamStr(lp)); end; 5:{PNG} begin png.Assign(bmp); png.SaveToFile(ParamStr(lp)); end; end; end; finally bmp.Free; clip.Free; png.Free; end;{of try} end;{of if FileExists} end.
動作環境・仕様とダウンロード
ソフトウェア仕様
対応OSWindows95/98/Me/2000/XP/Vista/7
最終更新2008-5-7
Version1.0.0.0
DownloadDOWNLOAD (size:101KB)
種別Freesoftware
履歴
- 2008-5-7 version 1.0.0.0
- 楽をするために開発。