BSOne.SFC/Tocsg.Module/ImageMasking/DImgMskMain.pas

257 lines
6.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.