| | |
| | | { ============================================================================== |
| | | 方法名稱: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。 |
| | | 引用相依:CheckSize, FileExists, FindPoint, FileName2FormCode, FindSQLData, |
| | | GetFindResult, ImageReSize_FormID, ImageResize, ISExistImg, |
| | | LoadFileGetMD5, LoadFromFile, SaveToFile |
| | | 方法描述:【正式案件影像定位縮放】 |
| | | 依據表單定義的定位點(十字線或邊框)對案件影像進行標準化縮放。 |
| | | 1. 識別與檢核:從檔案名稱提取 FormID,並從資料庫 (FORM_INF_List) 讀取標準 |
| | | 寬高與定位點類型 (ANCHOR/FRAME)。 |
| | | 2. 補件保護:若 FWH_category 為 'N'(補件模式)且影像已存在,則跳過處理。 |
| | | 3. 定位偵測:載入影像後,利用 FindPoint 尋找左上、右上、左下三個定位點。 |
| | | 4. 縮放執行:調用 CheckSize 計算尺寸偏移量,並執行 ImageResize 進行實體 |
| | | 縮放與對齊。 |
| | | 5. 資料完整性:縮放後重新驗證定位點,若成功則覆蓋原檔並更新 MD5 排除清單, |
| | | 同時於 ReSize.dat 紀錄處理時間與尺寸資訊。 |
| | | 6. 錯誤處理:若定位點找尋失敗(如污損、傾斜過大),則將錯誤原因紀錄於 |
| | | AnchorError.dat 以供後續人工排錯。 |
| | | ============================================================================== } |
| | | Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String); //依十字定位點做縮放 |
| | | var |
| | |
| | | DW := GetFindResult('T1.FORM_WIDTH'); |
| | | ANCHOR := UpperCase(GetFindResult('T1.ANCHOR')); |
| | | ANCHOR := Index2Anchor(ANCHOR); |
| | | Display1.Lines.Add(FormID+','+DH+','+DW); |
| | | //ShowMessage('AAAAAAAAA'); |
| | | Display1.Lines.Add(FormID+','+DH+','+DW); |
| | | 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 |
| | |
| | | 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); |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:ImageReSize_tmp |
| | | 引用相依:CheckSize, ImageReSize_tmp, ImageResize, LoadFromFile, SaveToFile |
| | | 方法描述:針對暫存影像檔案執行十字定位點縮放處理。此方法是 ImageReSize_FormID |
| | | 的簡化版本,主要針對暫存檔 (FileName) 與指定的 FormID。邏輯包含從資料 |
| | | 庫清單查詢表單尺寸與定位模式,若符合 ANCHOR 或 FRAME 類型,則載入影像 |
| | | 並呼叫 CheckSize 檢查是否需要調整。若偵測到影像存在偏移或比例差異(Siz |
| | | eStr 非空),則將調整後的影像直接覆蓋儲存回原始路徑。 |
| | | 引用相依:CheckSize, FindSQLData, GetFindResult, Index2Anchor, ImageReSize_tmp, |
| | | ImageResize, LoadFromFile, SaveToFile |
| | | 方法描述:【暫存影像定位縮放】 |
| | | 針對掃描過程中的臨時或暫存影像檔案執行快速定位點縮放。 |
| | | 1. 規格查詢:依傳入的 FormID 查詢表單規格。 |
| | | 2. 自動校正:載入影像後,透過 CheckSize 自動偵測三個定位點座標。 |
| | | 3. 原地覆蓋:若 CheckSize 回傳非空值(代表檢測通過且已計算偏移),則直接 |
| | | 將校正後的影像儲存回原始路徑。 |
| | | 此方法邏輯較 ImageReSize_FormID 簡潔,不紀錄 MD5 與詳細日誌,主要用於 |
| | | 處理即時上傳或切割前的預處理影像。 |
| | | ============================================================================== } |
| | | Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String); //依十字定位點做縮放(暫存檔) |
| | | var |
| | |
| | | |
| | | { ============================================================================== |
| | | 方法名稱:CheckNeedCrop |
| | | 引用相依:CheckNeedCrop, TDibGraphic |
| | | 方法描述:判斷掃瞄影像是否為 A3 尺寸並需要進行切割(Crop)。判定邏輯有二:首先,檢 |
| | | 查影像寬度是否大於 4 倍的 DPI 閥值,藉此初步判斷為大尺寸掃瞄件;其次, |
| | | 遍歷目前的條碼清單 (MpsBarcodeinf),統計有效的表單代碼 (FormID) 數量。 |
| | | 如果影像寬度達標且有效表單數量正好為 2,則返回 True。這代表此張大圖實 |
| | | 際上是由兩份 A4 表單併排掃瞄而成,後續需依此旗標進行影像分割處理。 |
| | | 引用相依:CheckNeedCrop, FormIDExists, MpsBarcodeinf, TDibGraphic |
| | | 方法描述:【A3 影像切割判定】 |
| | | 判定目前的影像是否為「一紙兩面」的 A3 規格,進而決定是否執行切割 (Crop)。 |
| | | 判定邏輯包含兩大要件: |
| | | 1. 物理尺寸:影像寬度必須大於 DPI 的 4 倍(針對 A3 橫向掃描的特徵)。 |
| | | 2. 內容特徵:檢查當前偵測到的條碼清單 (MpsBarcodeinf),統計其中符合系統 |
| | | 定義長度 (FormIDLength) 且在資料庫中有效的 FormID 數量。 |
| | | 判定結果:當上述物理條件成立,且「有效表單代碼數量精確等於 2」時,回傳 |
| | | True,觸發後續的影像切割流程。 |
| | | ============================================================================== } |
| | | Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像 |
| | | Var |
| | |
| | | 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 |
| | |
| | | inc(FormIDCount); |
| | | end; |
| | | end; |
| | | |
| | | end; |
| | | |
| | | //ShowMessage('FormIDCount='+IntToStr(FormIDCount)+#10#13+'MpsBarcodeinf.count='+IntToStr(MpsBarcodeinf.count)); |
| | | if FormIDCount = 2 then |
| | | begin |
| | | Result := True; |