{ ============================================================================== 方法名稱: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;