{ ==============================================================================
|
方法名稱:ImageReSize_FormID
|
引用相依:CheckSize, FileExists, FindPoint, ImageReSize_FormID, ImageResize, L
|
oadFileGetMD5, LoadFromFile, SaveToFile
|
方法描述:根據表單的十字定位點或邊框 (ANCHOR/FRAME) 對掃瞄影像進行縮放調整。流
|
程如下:
|
1. 從 FORM_INF_List 取得表單預設高寬與定位類型。
|
2. 載入對應案件下的影像檔,若為補件模式則跳過原有圖檔。
|
3. 呼叫 FindPoint 尋找影像中的十字線或邊框。
|
4. 呼叫 CheckSize 計算偏移與縮放比例。
|
5. 呼叫 ImageResize 執行實際調整。
|
6. 成功縮放後,記錄檔案 MD5 並儲存更新後的影像,同時將操作記錄寫入 ReS
|
ize.dat;若定位點遺失或辨識錯誤,則記錄於 AnchorError.dat。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String); //依十字定位點做縮放
|
var
|
FormID : String;
|
DH,DW : String;
|
NowW,NowH : Integer;
|
ANCHOR : String; //是否有十字線
|
SizeStr : String;
|
S : TStringlist;
|
v,v1:Integer;
|
IsRecordMD5:Boolean;
|
begin
|
IsRecordMD5:=False;
|
FormID := FileName2FormCode(FileName);
|
if FormID = '' then Exit;
|
|
IF FindSQLData(FORM_INF_List,'T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
|
begin
|
DH := GetFindResult('T1.FORM_HEIGHT');
|
DW := GetFindResult('T1.FORM_WIDTH');
|
ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
|
ANCHOR := Index2Anchor(ANCHOR);
|
Display1.Lines.Add(FormID+','+DH+','+DW);
|
//ShowMessage('AAAAAAAAA');
|
if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then //有十字定位點
|
begin
|
//ShowMessage('BBBBBBB');
|
ImageScrollBox1.LoadFromFile(ImageSavePath+CaseID+'\Upload\'+FileName,1);
|
|
if (FWH_category='N') and ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName) then
|
begin
|
Exit;//20171103 補件 原有的圖不作resize
|
end;
|
|
//FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH);
|
FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
|
|
SizeStr := CheckSize(ISB_BW,UpLPoint,UpRPoint,DownLPoint,DW,DH);
|
ImageResize(ImageScrollBox1.Graphic,ISB_BW.Graphic.Width,ISB_BW.Graphic.Height);
|
|
FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
|
v := 5;
|
v1 := length(SizeStr);
|
IF (SizeStr <> '') and (Copy(SizeStr,1,v) <> 'ERROR') then
|
begin
|
//ShowMessage('CCCCC');
|
if (ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName)) and (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName))=-1) then
|
begin
|
IsRecordMD5:=True;
|
end;
|
ImageScrollBox1.SaveToFile(ImageSavePath+CaseID+'\Upload\'+FileName);
|
if IsRecordMD5 then
|
begin
|
reSizeExistImgList.add(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName));
|
end;
|
//showmessage(ImageSavePath+CaseID+'\Upload\'+FileName);
|
S := TStringlist.Create; ///20110422拿掉 換成上傳才做
|
if FileExists(ImageSavePath+CaseID+'\Upload\ReSize.dat') then
|
S.LoadFromFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
|
//S.Add(FormCode2FormName(FormID)+' '+SizeStr);
|
S.Add(FileName+','+SizeStr+#8+DateTimetoStr(Now));
|
S.SaveToFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
|
S.Free;
|
end;
|
if (Copy(SizeStr,1,v) = 'ERROR') then //未找到三個定位點
|
begin
|
S := TStringlist.Create;
|
if FileExists(ImageSavePath+CaseID+'\Upload\AnchorError.dat') then
|
S.LoadFromFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
|
S.Add(FileName+'-->'+Copy(SizeStr,V+1,V1-v));
|
S.SaveToFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
|
S.Free;
|
end;
|
|
ImageScrollBox1.FileName := '';
|
end;
|
end;
|
end;
|
|
|
{ ==============================================================================
|
方法名稱:ImageReSize_tmp
|
引用相依:CheckSize, ImageReSize_tmp, ImageResize, LoadFromFile, SaveToFile
|
方法描述:針對暫存影像檔案執行十字定位點縮放處理。此方法是 ImageReSize_FormID
|
的簡化版本,主要針對暫存檔 (FileName) 與指定的 FormID。邏輯包含從資料
|
庫清單查詢表單尺寸與定位模式,若符合 ANCHOR 或 FRAME 類型,則載入影像
|
並呼叫 CheckSize 檢查是否需要調整。若偵測到影像存在偏移或比例差異(Siz
|
eStr 非空),則將調整後的影像直接覆蓋儲存回原始路徑。
|
============================================================================== }
|
Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String); //依十字定位點做縮放(暫存檔)
|
var
|
DH,DW : String;
|
ANCHOR : String; //是否有十字線
|
SizeStr : String;
|
S : TStringlist;
|
begin
|
IF FindSQLData(FORM_INF_List,'T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
|
begin
|
DH := GetFindResult('T1.FORM_HEIGHT');
|
DW := GetFindResult('T1.FORM_WIDTH');
|
ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
|
ANCHOR := Index2Anchor(ANCHOR);
|
if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then //有十字定位點
|
begin
|
ImageScrollBox1.LoadFromFile(FileName,1);
|
SizeStr := CheckSize(ImageScrollBox1,UpLPoint,UpRPoint,DownLPoint,DW,DH);
|
IF SizeStr <> '' then
|
begin
|
ImageScrollBox1.SaveToFile(FileName);
|
end;
|
ImageScrollBox1.FileName := '';
|
end;
|
end;
|
end;
|
|
|
{ ==============================================================================
|
方法名稱:CheckNeedCrop
|
引用相依:CheckNeedCrop, TDibGraphic
|
方法描述:判斷掃瞄影像是否為 A3 尺寸並需要進行切割(Crop)。判定邏輯有二:首先,檢
|
查影像寬度是否大於 4 倍的 DPI 閥值,藉此初步判斷為大尺寸掃瞄件;其次,
|
遍歷目前的條碼清單 (MpsBarcodeinf),統計有效的表單代碼 (FormID) 數量。
|
如果影像寬度達標且有效表單數量正好為 2,則返回 True。這代表此張大圖實
|
際上是由兩份 A4 表單併排掃瞄而成,後續需依此旗標進行影像分割處理。
|
============================================================================== }
|
Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
|
Var
|
i,FormIDCount : Integer;
|
begin
|
Result := False;
|
FormIDCount := 0;
|
if (Graphic.Width > (4 * Graphic.XDotsPerInch)) {or (Graphic.Height > (15 * Graphic.YDotsPerInch))} then
|
//if (Graphic.Width > (6 * Graphic.XDotsPerInch)) then
|
begin
|
for I := 1 to MpsBarcodeinf.Count do
|
begin
|
if (Length(MpsBarcodeinf.Text[i])=FormIDLength) and FormIDExists(MpsBarcodeinf.Text[i],False,0) then
|
begin
|
inc(FormIDCount);
|
end;
|
end;
|
|
end;
|
|
//ShowMessage('FormIDCount='+IntToStr(FormIDCount)+#10#13+'MpsBarcodeinf.count='+IntToStr(MpsBarcodeinf.count));
|
if FormIDCount = 2 then
|
begin
|
Result := True;
|
end;
|
end;
|