curtis
21小時前 5577f3ba7b9f0319c9b32d7080165207726d1f81
reassemble/scan/mermaid/OnAcquire.md
@@ -1,39 +1,31 @@
```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([結束])
```