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
- 楽をするために開発。
