| | |
| | | ```mermaid |
| | | graph TD |
| | | Start([Start StatrTwainScan]) --> CheckConfig{Scanner.IsConfigured?} |
| | | CheckConfig -- No --> MsgNoDriver[顯示 TWAIN 驅動尚未安裝訊息] --> ExitStatrTwainScan([Exit]) |
| | | CheckConfig -- Yes --> InitScanInfo[初始化 ScanInfo 結構<br/>建立 TTiffGraphic] |
| | | |
| | | InitScanInfo --> TryBlock1[try: 開始掃瞄設定] |
| | | |
| | | subgraph Try_Main |
| | | TryBlock1 --> SetParams[設定 DPI, ScanColor, ShowUI] |
| | | SetParams --> TryOpen[try: 開啟掃瞄來源] |
| | | |
| | | subgraph Try_OpenSource |
| | | TryOpen --> OpenSource[Scanner.OpenSource] |
| | | OpenSource --> SetDuplex[設定雙面/亮度/對比] |
| | | end |
| | | |
| | | SetDuplex --> CatchOpen{發生錯誤?} |
| | | CatchOpen -- Yes --> ShowErr[顯示掃瞄器錯誤] |
| | | ShowErr --> CloseSrc1[Scanner.CloseSource] --> ExitStatrTwainScan |
| | | |
| | | CatchOpen -- No --> TryAcquire[try: 執行獲取影像] |
| | | |
| | | subgraph Try_Acquire |
| | | TryAcquire --> Acquire[Scanner.AcquireWithSourceOpen<br/>傳入 OnAcquire 回呼] |
| | | Acquire --> CatchAcq{發生 Exception?} |
| | | CatchAcq -- Yes --> CloseSrc2[Scanner.CloseSource] |
| | | end |
| | | |
| | | TryAcquire -. finally .-> CloseSrc3[Scanner.CloseSource] |
| | | end |
| | | |
| | | Try_Main -. finally .-> FinalCleanup[Scanner.CloseSource<br/>ScanInfo.Graphic.Free] |
| | | FinalCleanup --> EndStatrTwainScan([End]) |
| | | flowchart TD |
| | | Start([開始]) --> CheckConfig{掃描器驅動是否已安裝?} |
| | | CheckConfig -- 否 --> ShowErr[顯示錯誤訊息] --> End([結束]) |
| | | CheckConfig -- 是 --> InitScanInfo[初始化 ScanInfo 並設定為多頁模式] |
| | | InitScanInfo --> SetScannerParams[設定掃描參數: DPI, 格式, UI 顯示模式] |
| | | SetScannerParams --> OpenSource[開啟掃描來源] |
| | | OpenSource --> TryAcquire[執行 AcquireWithSourceOpen 掃描作業] |
| | | TryAcquire --> CatchErr{掃描過程中發生錯誤?} |
| | | CatchErr -- 是 --> ShowScanErr[顯示掃描錯誤訊息] --> CloseSource1[關閉掃描來源] --> FreeRes[釋放 Graphic 資源] --> End |
| | | CatchErr -- 否 --> CloseSource2[掃描結束, 關閉掃描來源] |
| | | CloseSource2 --> FreeRes --> End |
| | | ``` |