257 lines
6.7 KiB
Plaintext
257 lines
6.7 KiB
Plaintext
unit DImgMskMain;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
|
||
Tocsg.Controls, hyieutils, iexBitmaps, hyiedefs, iesettings, iexLayers,
|
||
iexRulers, ieview, imageenview, imageen;
|
||
|
||
const
|
||
EXE_OCR = 'BSWmcr.exe';
|
||
|
||
type
|
||
TDlgImgMskMain = class(TForm)
|
||
pnTop: TPanel;
|
||
pnClient: TPanel;
|
||
btnLoadImg: TButton;
|
||
edImgPath: TEdit;
|
||
ImageEn: TImageEn;
|
||
chImgFit: TCheckBox;
|
||
Label1: TLabel;
|
||
edMaskTxt: TEdit;
|
||
btnMasking: TButton;
|
||
procedure btnLoadImgClick(Sender: TObject);
|
||
procedure chImgFitClick(Sender: TObject);
|
||
procedure btnMaskingClick(Sender: TObject);
|
||
private
|
||
{ Private declarations }
|
||
MgCtrls_: TManagerInputControlsData;
|
||
public
|
||
{ Public declarations }
|
||
Constructor Create(aOwner: TComponent); override;
|
||
Destructor Destroy; override;
|
||
end;
|
||
|
||
var
|
||
DlgImgMskMain: TDlgImgMskMain;
|
||
|
||
implementation
|
||
|
||
uses
|
||
Tocsg.Path, Tocsg.Process, ManagerImgMskData, Tocsg.Safe, Tocsg.Strings;
|
||
|
||
{$R *.dfm}
|
||
|
||
Constructor TDlgImgMskMain.Create(aOwner: TComponent);
|
||
begin
|
||
Inherited Create(aOwner);
|
||
MgCtrls_ := TManagerInputControlsData.Create(CutFileExt(GetRunExePath) + '.ctr');
|
||
MgCtrls_.RegInputCtrl(edImgPath);
|
||
MgCtrls_.RegInputCtrl(chImgFit);
|
||
MgCtrls_.RegInputCtrl(edMaskTxt);
|
||
MgCtrls_.Load;
|
||
end;
|
||
|
||
Destructor TDlgImgMskMain.Destroy;
|
||
begin
|
||
FreeAndNil(MgCtrls_);
|
||
Inherited;
|
||
end;
|
||
|
||
procedure TDlgImgMskMain.btnMaskingClick(Sender: TObject);
|
||
|
||
procedure DoMasking(pEnt: PMskEnt);
|
||
var
|
||
R: TRect;
|
||
i: Integer;
|
||
sText: String;
|
||
x, y: Integer;
|
||
begin
|
||
R.Left := pEnt.x;
|
||
R.Top := pEnt.y;
|
||
R.Width := pEnt.w;
|
||
R.Height := pEnt.h;
|
||
|
||
ImageEn.IO.Bitmap.Canvas.Pen.Color := clWhite;
|
||
ImageEn.IO.Bitmap.Canvas.Pen.Style := psSolid;
|
||
ImageEn.IO.Bitmap.Canvas.Brush.Color := clWhite;
|
||
ImageEn.IO.Bitmap.Canvas.Brush.Style := bsSolid;// bsBDiagonal;
|
||
ImageEn.IO.Bitmap.Canvas.FillRect(R);
|
||
|
||
// ImageEn.IO.Bitmap.Canvas.Pen.Color := clBlack; // <20>缱 <20><>
|
||
// ImageEn.IO.Bitmap.Canvas.Pen.Width := 1; // <20><><EFBFBD><EFBFBD> <20>β<EFBFBD>
|
||
//
|
||
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߱<EFBFBD>
|
||
// y := R.Top;
|
||
// while y <= R.Bottom do
|
||
// begin
|
||
// ImageEn.IO.Bitmap.Canvas.MoveTo(R.Left, y);
|
||
// ImageEn.IO.Bitmap.Canvas.LineTo(R.Right, y);
|
||
// Inc(y, 5);
|
||
// end;
|
||
//
|
||
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߱<EFBFBD>
|
||
// x := R.Left;
|
||
// while x <= R.Right do
|
||
// begin
|
||
// ImageEn.IO.Bitmap.Canvas.MoveTo(x, R.Top);
|
||
// ImageEn.IO.Bitmap.Canvas.LineTo(x, R.Bottom);
|
||
// Inc(x, 5);
|
||
// end;
|
||
|
||
// // <20>缱 <20>߱<EFBFBD>
|
||
// ImageEn.IO.Bitmap.Canvas.Pen.Color := clBlack; // <20>缱 <20><>
|
||
// ImageEn.IO.Bitmap.Canvas.Pen.Width := 1; // <20><><EFBFBD><EFBFBD> <20>β<EFBFBD>
|
||
//
|
||
// x := R.Left;
|
||
// while x <= R.Right do
|
||
// begin
|
||
// ImageEn.IO.Bitmap.Canvas.MoveTo(x, R.Top);
|
||
// y := R.Top + (x - R.Left);
|
||
// if y <= R.Bottom then
|
||
// ImageEn.IO.Bitmap.Canvas.LineTo(R.Left, y)
|
||
// else
|
||
// ImageEn.IO.Bitmap.Canvas.LineTo(x - (R.Bottom - R.Top), R.Bottom);
|
||
// Inc(x, 5);
|
||
// end;
|
||
|
||
sText := 'ToCSG. BSOne jjang.';
|
||
for i := 1 to 99 do
|
||
begin
|
||
ImageEn.IO.Bitmap.Canvas.Font.Size := i;
|
||
if (ImageEn.IO.Bitmap.Canvas.TextHeight(sText) - 1) >= (R.Height - 2) then
|
||
begin
|
||
break;
|
||
end;
|
||
end;
|
||
ImageEn.IO.Bitmap.Canvas.TextRect(R, sText, [tfCenter, tfEndEllipsis, tfVerticalCenter]);
|
||
|
||
|
||
ImageEn.IO.Bitmap.Canvas.Pen.Color := clBlack;
|
||
ImageEn.IO.Bitmap.Canvas.Pen.Style := psDot;
|
||
ImageEn.IO.Bitmap.Canvas.MoveTo(R.Left, R.Top);
|
||
ImageEn.IO.Bitmap.Canvas.LineTo(R.Left + R.Width, R.Top);
|
||
ImageEn.IO.Bitmap.Canvas.LineTo(R.Left + R.Width, R.Top + R.Height);
|
||
ImageEn.IO.Bitmap.Canvas.LineTo(R.Left, R.Top + R.Height);
|
||
ImageEn.IO.Bitmap.Canvas.LineTo(R.Left, R.Top);
|
||
end;
|
||
|
||
var
|
||
sOcrPath,
|
||
sTmpPath: String;
|
||
MgMsk: TManagerImgMskData;
|
||
i, n: Integer;
|
||
begin
|
||
edImgPath.Text := Trim(edImgPath.Text);
|
||
if edImgPath.Text = '' then
|
||
begin
|
||
MessageBox(Handle, PChar('<27>̹<EFBFBD><CCB9><EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edImgPath.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
if not FileExists(edImgPath.Text) then
|
||
begin
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edImgPath.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
edMaskTxt.Text := Trim(edMaskTxt.Text);
|
||
if edMaskTxt.Text = '' then
|
||
begin
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD>ŷ <20>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edMaskTxt.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
ImageEn.IO.LoadFromFile(edImgPath.Text);
|
||
ImageEn.AutoFit := chImgFit.Checked;
|
||
except
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>̹<EFBFBD><CCB9><EFBFBD> <20>Դϴ<D4B4>.'), PChar(Caption), MB_ICONSTOP or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
sOcrPath := GetRunExePathDir + EXE_OCR;
|
||
if not FileExists(sOcrPath) then
|
||
begin
|
||
MessageBox(Handle, PChar('OCR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.'), PChar(Caption), MB_ICONSTOP or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
sTmpPath := GetRunExePathDir + 'Temp\';
|
||
if not ForceDirectories(sTmpPath) then
|
||
begin
|
||
MessageBox(Handle, PChar('<27>۾<EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>.'), PChar(Caption), MB_ICONSTOP or MB_OK);
|
||
exit;
|
||
end;
|
||
sTmpPath := sTmpPath + '$TmpOcr.dat';
|
||
|
||
ExecuteAppWaitUntilTerminate(sOcrPath,
|
||
Format('-r "%s" "%s"', [edImgPath.Text, sTmpPath]), SW_HIDE, 10000);
|
||
|
||
if FileExists(sTmpPath) then
|
||
begin
|
||
Guard(MgMsk, TManagerImgMskData.Create(sTmpPath));
|
||
DeleteFile(sTmpPath);
|
||
|
||
var StrList: TStringList;
|
||
Guard(StrList, TStringList.Create);
|
||
SplitString(edMaskTxt.Text, '|', StrList, false, true);
|
||
|
||
var MskLst: TMskEntList;
|
||
Guard(MskLst, TMskEntList.Create);
|
||
for i := 0 to StrList.Count - 1 do
|
||
begin
|
||
if MgMsk.MatchToList(StrList[i], MskLst) > 0 then
|
||
begin
|
||
for n := 0 to MskLst.Count - 1 do
|
||
DoMasking(MskLst[n]);
|
||
end;
|
||
end;
|
||
ImageEn.Update;
|
||
end;
|
||
|
||
MgCtrls_.Save;
|
||
end;
|
||
|
||
procedure TDlgImgMskMain.chImgFitClick(Sender: TObject);
|
||
begin
|
||
ImageEn.AutoFit := chImgFit.Checked;
|
||
ImageEn.Update;
|
||
MgCtrls_.Save;
|
||
end;
|
||
|
||
procedure TDlgImgMskMain.btnLoadImgClick(Sender: TObject);
|
||
begin
|
||
edImgPath.Text := Trim(edImgPath.Text);
|
||
if edImgPath.Text = '' then
|
||
begin
|
||
MessageBox(Handle, PChar('<27>̹<EFBFBD><CCB9><EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edImgPath.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
if not FileExists(edImgPath.Text) then
|
||
begin
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
edImgPath.SetFocus;
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
ImageEn.IO.LoadFromFile(edImgPath.Text);
|
||
ImageEn.AutoFit := chImgFit.Checked;
|
||
except
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>̹<EFBFBD><CCB9><EFBFBD> <20>Դϴ<D4B4>.'), PChar(Caption), MB_ICONSTOP or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
MgCtrls_.Save;
|
||
end;
|
||
|
||
end.
|