| | |
| | | ```mermaid |
| | | graph TD |
| | | Start([Start OnAcquire]) --> GetInfo[取得 pScanInfo] |
| | | GetInfo --> MultiPage{MultiPage?} |
| | | flowchart TD |
| | | Start([開始]) --> GetInfo[獲取 CallBackData 並轉為 ScanInfo 指針] |
| | | GetInfo --> AssignDIB[將 DIB 句柄轉為影像對象並設定 DPI] |
| | | AssignDIB --> FormatCheck{檢查影像格式} |
| | | |
| | | subgraph ImagePreprocessing |
| | | MultiPage -- Yes --> AssignDib[Assign DIB to Graphic & Set DPI] |
| | | AssignDib --> CheckFormat{ImageFormat?} |
| | | CheckFormat -- BlackWhite --> BWProc[條碼辨識/旋轉/反向/傾斜矯正/清黑邊] |
| | | CheckFormat -- TrueColor --> ColorProc[條碼辨識/旋轉/設定 JPEG 壓縮] |
| | | CheckFormat -- Gray/Color256 --> GrayProc[轉灰階/設定 JPEG 壓縮] |
| | | CheckFormat -- Others --> OtherProc[設定 PackBits 壓縮] |
| | | end |
| | | FormatCheck -- 黑白 (ifBlackWhite) --> BWProc[條碼辨識, 旋轉, 反向, 去偏斜, 清黑邊] |
| | | FormatCheck -- 全彩 (ifTrueColor) --> ColorProc[設定 JPEG 壓縮品質與條碼辨識旋轉] |
| | | FormatCheck -- 灰階 (ifGray256) --> GrayProc[設定 JPEG 壓縮品質與條碼辨識旋轉] |
| | | |
| | | subgraph CropAndSave |
| | | ImagePreprocessing --> CreateTempGr[建立 iGraphic_First, iGraphic_sec] |
| | | CreateTempGr --> CropCheck{需要裁切 A3?} |
| | | CropCheck -- Yes --> DoCrop[將影像裁切為左右兩份] |
| | | CropCheck -- No --> SetFirst[iGraphic := iGraphic_First] |
| | | |
| | | DoCrop --> SetFirst |
| | | SetFirst --> WhileLoop{iGraphic 不為空?} |
| | | |
| | | WhileLoop -- Yes --> BlankCheck{是否刪除空白頁?} |
| | | BlankCheck -- No/Valid --> PageProcess[UI 顯示影像<br/>PageEnd 決定路徑與檔名] |
| | | PageProcess --> SaveFile{儲存檔案} |
| | | SaveFile -- .tif --> AppendTif[Append To Stream] |
| | | SaveFile -- .jpg --> SaveJpg[Save To File] |
| | | AppendTif --> DoPageDone[PageDone] |
| | | SaveJpg --> DoPageDone |
| | | |
| | | DoPageDone --> NextImg[切換至 iGraphic_Sec 或 設為空] |
| | | BlankCheck -- IsBlank --> NextImg |
| | | NextImg --> WhileLoop |
| | | end |
| | | BWProc --> CropCheck{檢查是否需 A3 切割為 A4?} |
| | | ColorProc --> CropCheck |
| | | GrayProc --> CropCheck |
| | | |
| | | WhileLoop -- No --> FinallyFree[釋放暫存 Graphic 資源] |
| | | FinallyFree --> EndOnAcquire([End]) |
| | | CropCheck -- 是 --> PerformCrop[執行影像切割為第一與第二部分] |
| | | CropCheck -- 否 --> SingleImg[直接處理原始影像] |
| | | |
| | | PerformCrop --> LoopPages[對每一部分進行迴圈處理] |
| | | SingleImg --> LoopPages |
| | | |
| | | LoopPages --> BlankCheck{是否刪除空白頁?} |
| | | BlankCheck -- 否/非空白 --> SaveProc[呼叫 PageEnd 決定路徑檔名並儲存檔案] |
| | | BlankCheck -- 是空白 --> NextPage[處理下一部分] |
| | | |
| | | SaveProc --> CallPageDone[呼叫 PageDone 更新 UI] |
| | | CallPageDone --> NextPage |
| | | |
| | | NextPage --> LoopEnd{所有部分處理完畢?} |
| | | LoopEnd -- 否 --> LoopPages |
| | | LoopEnd -- 是 --> FreeRes[釋放資源] --> End([結束]) |
| | | ``` |