From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照

---
 reassemble/scan/twain.pas                                                  |   57 +++----------
 reassemble/img/transformer.pas                                             |   25 +----
 scripts/list_image_dependencies.js                                         |   32 +++++++
 reassemble/CB_IMGPSScanImp.api.pas                                         |    3 
 reassemble/view/misc.pas                                                   |    4 
 reassemble/img/mermaid/GetSiteOMR.md                                       |   12 +++
 scripts/dist/deps.all.csv                                                  |   18 +++-
 doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.UIView.json         |    3 
 /dev/null                                                                  |   20 -----
 scripts/dist/CB_IMGPSScanImp.pas.bk.image.csv                              |   18 +++-
 reassemble/CB_IMGPSScanImp.omr.pas                                         |   12 --
 reassemble/view/toolBar.pas                                                |    3 
 doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.ImageProcessor.json |    1 
 13 files changed, 100 insertions(+), 108 deletions(-)

diff --git a/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.ImageProcessor.json b/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.ImageProcessor.json
index 6b81b10..3a92999 100644
--- a/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.ImageProcessor.json
+++ b/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.ImageProcessor.json
@@ -7,6 +7,7 @@
       "OMR 檢核"
     ],
     "deps": [
+      "ClearLine",
       "FindPoint",
       "GetSiteOMR",
       "Get_OMR",
diff --git a/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.UIView.json b/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.UIView.json
index 1c13a26..e577acf 100644
--- a/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.UIView.json
+++ b/doc/curtis/prompt/scanimpl_analysis/scanimpl_annalysis.UIView.json
@@ -1645,6 +1645,7 @@
       "UIView.toolBar"
     ],
     "deps": [
+      "BWTif2Jpg",
       "FileExists",
       "LoadFromFile",
       "SaveToFile",
@@ -3218,9 +3219,11 @@
     ],
     "deps": [
       "DirectoryExists",
+      "FieldMask",
       "FileExists",
       "FindPoint",
       "LoadFromFile",
+      "SaveAnnotation",
       "Str2Dir",
       "_DelTree"
     ],
diff --git a/reassemble/CB_IMGPSScanImp.api.pas b/reassemble/CB_IMGPSScanImp.api.pas
index 1e95596..6e4905a 100644
--- a/reassemble/CB_IMGPSScanImp.api.pas
+++ b/reassemble/CB_IMGPSScanImp.api.pas
@@ -376,7 +376,8 @@
   引用相依:En_DecryptionStr_Base64, ProcessServlet_Get
   方法描述:向伺服器請求 LASTEST_FORM_INF 最新表單版本資訊(模式 7)。方法會獲取各
             文件編號對應的最新表單 ID 與版本號,並儲存於 LASTEST_FORM_INF_List。此
-            資訊用於確保使用者掃瞄的是最新版表單,或是用於舊案件轉檔時的版本對照。
+            資訊用於確保使用者掃瞄的是最新版表單,或是用於舊案件轉檔時與歷史版本
+            對照。
 ============================================================================== }
 Function TCB_IMGPSScanX.GetSetInf7 : Boolean; //取系統設定資訊mode5  LASTEST_FORM_INF
 var
diff --git a/reassemble/CB_IMGPSScanImp.omr.pas b/reassemble/CB_IMGPSScanImp.omr.pas
index 7a4fa79..79c45c1 100644
--- a/reassemble/CB_IMGPSScanImp.omr.pas
+++ b/reassemble/CB_IMGPSScanImp.omr.pas
@@ -1,14 +1,8 @@
 { ==============================================================================
   方法名稱:GetSiteOMR
-  引用相依:FindPoint, GetSiteOMR, Get_OMR, LoadFromFile
-  方法描述:在指定影像文件的特定座標執行 OMR (光學標記辨識)。核心邏輯包含:
-            1. 檢查並載入影像檔(若尚未載入),並呼叫 ClearLine 初始化黑白緩衝區。
-            2. 讀取影像的 DPI 與寬高資訊。
-            3. 使用 CM_Str2Rect 將 Site 字串轉為 TRect 矩陣,並參考定位點 (UpLPoi
-            nt) 進行位移計算。
-            4. 限制辨識區域座標不超出影像邊界。
-            5. 呼叫 Get_OMR 對黑白圖形緩衝區執行辨識並返回結果值(通常為 1 或 0)。
-            此方法是自動化資料檢核的重要工具。
+  引用相依:ClearLine, FindPoint, GetSiteOMR, Get_OMR, LoadFromFile
+  方法描述:在影像指定座標執行 OMR 辨識。載入影像、計算相對於定位點的座標偏移、限制
+            邊界並呼叫核心辨識程式獲取結果。
 ============================================================================== }
 function TCB_IMGPSScanX.GetSiteOMR(FileName,Site:String;bt: Integer): Integer;
 var
diff --git a/reassemble/img/mermaid/GetSiteOMR.md b/reassemble/img/mermaid/GetSiteOMR.md
new file mode 100644
index 0000000..03702f9
--- /dev/null
+++ b/reassemble/img/mermaid/GetSiteOMR.md
@@ -0,0 +1,12 @@
+```mermaid
+flowchart TD
+    Start([開始]) --> CheckFile{影像是否已載入?}
+    CheckFile -- 否 --> LoadImg[從檔案載入影像並清除緩衝線]
+    CheckFile -- 是 --> GetInfo[獲取影像 DPI 與寬高資訊]
+    
+    LoadImg --> GetInfo
+    GetInfo --> CalcRect[將 Site 字串轉為座標矩陣, 並參考定位點位移]
+    CalcRect --> BoundCheck[限制座標不超出影像邊界]
+    BoundCheck --> GetOMR[呼叫 Get_OMR 執行辨識]
+    GetOMR --> ReturnResult[返回辨識結果] --> End([結束])
+```
diff --git a/reassemble/img/transformer.pas b/reassemble/img/transformer.pas
index f967aa4..354cb93 100644
--- a/reassemble/img/transformer.pas
+++ b/reassemble/img/transformer.pas
@@ -2,15 +2,8 @@
   方法名稱: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。
+  方法描述:依據定位點縮放影像。查詢表單規格,載入影像(過濾補件模式),尋找十字線或
+            邊框定位點,執行縮放並紀錄 MD5 與日誌。
 ============================================================================== }
 Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
 var
@@ -94,11 +87,8 @@
 { ==============================================================================
   方法名稱:ImageReSize_tmp
   引用相依:CheckSize, ImageReSize_tmp, ImageResize, LoadFromFile, SaveToFile
-  方法描述:針對暫存影像檔案執行十字定位點縮放處理。此方法是 ImageReSize_FormID 
-            的簡化版本,主要針對暫存檔 (FileName) 與指定的 FormID。邏輯包含從資料
-            庫清單查詢表單尺寸與定位模式,若符合 ANCHOR 或 FRAME 類型,則載入影像
-            並呼叫 CheckSize 檢查是否需要調整。若偵測到影像存在偏移或比例差異(Siz
-            eStr 非空),則將調整後的影像直接覆蓋儲存回原始路徑。
+  方法描述:針對暫存檔執行定位點縮放。簡化版 Resize 邏輯,若偵測到尺寸偏移則直接覆
+            蓋原始檔案,用於處理臨時影像。
 ============================================================================== }
 Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
 var
@@ -130,11 +120,8 @@
 { ==============================================================================
   方法名稱:CheckNeedCrop
   引用相依:CheckNeedCrop, TDibGraphic
-  方法描述:判斷掃瞄影像是否為 A3 尺寸並需要進行切割(Crop)。判定邏輯有二:首先,檢
-            查影像寬度是否大於 4 倍的 DPI 閥值,藉此初步判斷為大尺寸掃瞄件;其次,
-            遍歷目前的條碼清單 (MpsBarcodeinf),統計有效的表單代碼 (FormID) 數量。
-            如果影像寬度達標且有效表單數量正好為 2,則返回 True。這代表此張大圖實
-            際上是由兩份 A4 表單併排掃瞄而成,後續需依此旗標進行影像分割處理。
+  方法描述:判斷影像是否需執行 A3 切割。依據影像寬度(大於 4 倍 DPI)及條碼清單中有
+            效表單代碼的數量(需為 2 個)作為判定據。
 ============================================================================== }
 Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
 Var
diff --git a/reassemble/mermaid/omr/GetSiteOMR.md b/reassemble/mermaid/omr/GetSiteOMR.md
deleted file mode 100644
index 61da963..0000000
--- a/reassemble/mermaid/omr/GetSiteOMR.md
+++ /dev/null
@@ -1,20 +0,0 @@
-```mermaid
-flowchart TD
-    Start([開始 GetSiteOMR]) --> CheckFile{目前檔案是否不同且不為空?}
-    
-    CheckFile -- 是 --> LoadImg[載入影像]
-    LoadImg --> ClearBW[初始化黑白緩衝區]
-    ClearBW --> Redraw[重繪並處理訊息]
-    Redraw --> CheckExist
-    
-    CheckFile -- 否 --> CheckExist{影像檔路徑不為空?}
-    
-    CheckExist -- 是 --> GetInfo[取得 DPI、寬高]
-    GetInfo --> CalcRect[轉換 Site 字串為 TRect 並參考定位點位移]
-    CalcRect --> Constrain[限制座標不超出影像邊界]
-    Constrain --> RunOMR[執行 Get_OMR]
-    RunOMR --> ReturnResult[返回辨識結果]
-    
-    CheckExist -- 否 --> End([結束])
-    ReturnResult --> End
-```
diff --git a/reassemble/scan/twain.pas b/reassemble/scan/twain.pas
index bdea582..fd7ceed 100644
--- a/reassemble/scan/twain.pas
+++ b/reassemble/scan/twain.pas
@@ -2,11 +2,9 @@
   方法名稱:StatrTwainScan
   引用相依:OnAcquire, Scanner, Scanner.AcquireWithSourceOpen, Scanner.CloseSour
             ce, Scanner.OpenSource, StatrTwainScan, TTiffGraphic
-  方法描述:啟動 TWAIN 掃瞄流程。此方法首先檢查掃瞄器驅動是否已安裝,接著初始化 Sc
-            anInfo 結構並設定掃瞄參數(如 DPI、影像格式、是否顯示 UI、雙面掃瞄模式、
-            亮度與對比)。流程中會開啟掃瞄來源,呼叫 AcquireWithSourceOpen 執行實際
-            掃瞄作業,並利用 try...finally 確保不論掃瞄成功與否,最終都會關閉掃瞄
-            來源並釋放資源。
+  方法描述:啟動 TWAIN 掃描流程。檢查驅動是否安裝,初始化 ScanInfo 並設定 DPI、影像
+            格式、UI 顯示及雙面掃描模式。執行 AcquireWithSourceOpen 並利用 try...f
+            inally 確保資源釋放。
 ============================================================================== }
 procedure TCB_IMGPSScanX.StatrTwainScan;
 var ScanInfo    : TScanInfo;
@@ -66,14 +64,8 @@
 { ==============================================================================
   方法名稱:OnAcquire
   引用相依:OnAcquire, TJpegGraphic, TTiffGraphic
-  方法描述:掃瞄影像獲取後的回呼處理函數。核心邏輯包含:
-            1. 將獲取的 DIB 句柄轉為影像對象並設定 DPI。
-            2. 依影像格式執行對應處理:黑白影像會進行條碼辨識、依條碼角度旋轉、影像
-            反向、傾斜矯正及清黑邊;全彩或灰階影像則設定 JPEG 壓縮品質。
-            3. 檢查是否需要進行 A3 切割為 A4 的處理。
-            4. 透過 Deletepage 檢查並過濾空白頁(依據檔案大小)。
-            5. 對於有效影像,更新 UI 顯示並呼叫 PageEnd 決定儲存路徑與檔名,最後依
-            副檔名儲存為 TIFF 或 JPEG 並呼叫 PageDone 完成頁面流程。
+  方法描述:掃描影像獲取後的回調處理。處理 DIB 句柄、設定 DPI、執行條碼辨識、影像旋
+            轉、反向、去偏斜及清黑邊。支援 A3 裁切判定與空白頁過濾。
 ============================================================================== }
 procedure TCB_IMGPSScanX.OnAcquire( const DibHandle    : THandle;
                                const XDpi         : Word;
@@ -319,11 +311,8 @@
 { ==============================================================================
   方法名稱:PageDone
   引用相依:LoadFromFile, PageDone
-  方法描述:完成單頁影像處理後的 UI 更新邏輯。此方法會遞增掃瞄影像總計數,並根據目
-            前的掃瞄模式(新建、取代、插入或取樣)將儲存好的影像檔載入到對應的 Image
-            ScrollBox 元件中。在新建模式下,還會根據 ScanImgShowMode 設定決定影像
-            顯示的品質(反鋸齒開啟與否)與縮放模式(zmFittopage),確保使用者能即時預
-            覽掃瞄結果。
+  方法描述:單頁影像處理後的 UI 更新。累加計數,根據模式(新建、取代、插入、取樣)將影
+            像載入對應的顯示元件,並依設定調整反鋸齒與縮放。
 ============================================================================== }
 procedure TCB_IMGPSScanX.PageDone;
 Var
@@ -380,14 +369,8 @@
   方法名稱:PageEnd
   引用相依:DirectoryExists, GetNoNameCase, PageEnd, SaveToFile, Str2Dir, _DelTr
             ee
-  方法描述:管理掃瞄影像的儲存路徑與檔案命名規則。主要邏輯如下:
-            1. 辨識條碼以取得 FormID,並判斷是否為導引頁或分案頁。
-            2. 若偵測到分案頁,會重置計數並嘗試取得新的案件編號(CaseID)。
-            3. 確定儲存目錄,包含處理「分份數」邏輯(依 DocNoNeedDiv 決定是否建立新
-            子目錄)。
-            4. 根據目前頁數與 FormID 產生標準化的檔名(如補零序號_FormID.tif)。
-            5. 更新 ContextList(影像索引資訊)並在掃瞄新案件時更新 TreeView UI 結
-            構。此方法確保每張影像都能正確歸類到對應的案件與文件目錄下。
+  方法描述:管理影像儲存路徑與命名。辨識條碼區分表單、導引頁或分案頁;處理分份邏輯
+            與自動建立目錄,並更新樹狀結構索引。
 ============================================================================== }
 procedure TCB_IMGPSScanX.PageEnd;
 Var
@@ -610,11 +593,8 @@
 { ==============================================================================
   方法名稱:R_W_Scanini
   引用相依:Scanner
-  方法描述:讀取或寫入掃瞄設定檔(FBScan.ini)。此方法使用 Tinifile 物件處理掃瞄相
-            關參數的 I/O 作業。當 Mode 為 'R' 時,從設定檔讀取包含空白頁刪除設定、
-            影像反向、清黑邊、旋轉角度、傾斜矯正、亮度對比以及 UI 顯示模式等參數;當 
-            Mode 為 'W' 時,則將目前的系統變數值回寫至設定檔中,以利下次啟動時恢復
-            使用者的個性化設定。
+  方法描述:讀取或寫入 FBScan.ini。處理包含空白頁刪除、影像反向、清黑邊、旋轉、去偏斜
+            、亮度對比及顯示模式等掃描參數。
 ============================================================================== }
 Procedure TCB_IMGPSScanX.R_W_Scanini(Mode:Char); //'R'讀取;'W'寫入
 var
@@ -662,12 +642,8 @@
 { ==============================================================================
   方法名稱:GetDefScanIni
   引用相依:FJpgCompression, Rotate, Scanner
-  方法描述:從資料庫參數清單(WORK_INF_List)初始化並設定掃瞄的系統預設值。流程首先
-            設定一組程式內建的預設數值,隨後遍歷 WORK_INF_List 並比對 PARA_NO 關
-            鍵字,動態更新包含:空白頁判斷大小、影像是否反相、清黑邊、掃瞄 DPI、雙面掃
-            瞄開啟、影像旋轉角度、傾斜矯正、亮度對比、影像儲存路徑、導引頁與分案頁代
-            碼列表、以及 JPEG 壓縮品質等關鍵參數。這使得掃瞄行為可以透過後台設定進
-            行彈性調整。
+  方法描述:從資料庫參數清單初始化掃描預設值。設定 DPI、雙面模式、旋轉角度、路徑、導
+            引頁及分案頁代碼等關鍵系統變數。
 ============================================================================== }
 Procedure TCB_IMGPSScanX.GetDefScanIni; //取得掃瞄的預設值
 var
@@ -850,11 +826,8 @@
 { ==============================================================================
   方法名稱:initkscan
   引用相依:Scanner, Scanner.CloseSource, Scanner.OpenSource, initkscan
-  方法描述:初始化並偵測掃瞄器硬體能力。此方法會先將雙面掃瞄勾選框(ScanDuplexCB)
-            設為停用,接著嘗試開啟掃瞄來源(OpenSource),檢查掃瞄器是否支援雙面掃瞄
-            功能(DuplexCap > 0)。如果硬體支援,則啟用 UI 上的勾選框供使用者選擇。最
-            後確保關閉掃瞄來源,若過程中發生異常,會呼叫 DataLoading(False,True) 
-            停止載入狀態提示。
+  方法描述:偵測掃描器硬體能力。嘗試開啟掃描來源以檢查是否支援雙面掃描 (DuplexCap
+            ),並據此啟用 UI 控制項。
 ============================================================================== }
 procedure TCB_IMGPSScanX.initkscan;
 begin
diff --git a/reassemble/view/misc.pas b/reassemble/view/misc.pas
index aa17008..5860cc3 100644
--- a/reassemble/view/misc.pas
+++ b/reassemble/view/misc.pas
@@ -4811,8 +4811,8 @@
 
 { ==============================================================================
   方法名稱:Case2Mask
-  引用相依:DirectoryExists, FileExists, FindPoint, LoadFromFile, Str2Dir, _DelT
-            ree
+  引用相依:DirectoryExists, FieldMask, FileExists, FindPoint, LoadFromFile, Sav
+            eAnnotation, Str2Dir, _DelTree
   方法描述:產生案件的遮罩影像(用於遮蔽敏感個資)。讀取 Context.dat,針對每張影像尋
             找定位點,並依據對應表單的 XML 定義執行區域遮罩,最後存入指定目錄。
 ============================================================================== }
diff --git a/reassemble/view/toolBar.pas b/reassemble/view/toolBar.pas
index 86962c9..63e2f56 100644
--- a/reassemble/view/toolBar.pas
+++ b/reassemble/view/toolBar.pas
@@ -421,7 +421,8 @@
 
 { ==============================================================================
   方法名稱:SampleScanBtnClick
-  引用相依:FileExists, LoadFromFile, SaveToFile, StatrTwainScan, upFile
+  引用相依:BWTif2Jpg, FileExists, LoadFromFile, SaveToFile, StatrTwainScan, upF
+            ile
   方法描述:處理「範本掃瞄」按鈕點擊。切換為範本模式並引導使用者輸入 FormID,掃瞄後
             產生 TIF 與 JPG 影像。隨後透過 HTTPS 將範本上傳至伺服器,上傳過程中會
             嚴格檢查網路狀態、Session 有效性與伺服器回傳結果。
diff --git a/scripts/dist/CB_IMGPSScanImp.pas.bk.image.csv b/scripts/dist/CB_IMGPSScanImp.pas.bk.image.csv
index 54f47a9..dcd197f 100644
--- a/scripts/dist/CB_IMGPSScanImp.pas.bk.image.csv
+++ b/scripts/dist/CB_IMGPSScanImp.pas.bk.image.csv
@@ -5,10 +5,10 @@
 [V],"Button6Click","CB_IMGPSScanImp.pas.bk","598","Rotate","","BarCodeRotate : Integer; //條碼要轉的角度"
 [V],"Button6Click","CB_IMGPSScanImp.pas.bk","615","FJpgCompression","","FJpgCompression:integer;// 20171211 jpg to tif 的壓縮率"
 [V],"GetSiteOMR","CB_IMGPSScanImp.pas.bk","674","GetSiteOMR","","function GetSiteOMR(FileName, Site: String;bt: Integer): Integer;"
-[V],"ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","742","ImageResize","","Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放"
 [V],"ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","742","ImageReSize_FormID","","Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放"
-[V],"ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","743","ImageResize","","Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)"
+[V],"ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","742","ImageResize","","Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放"
 [V],"ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","743","ImageReSize_tmp","","Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)"
+[V],"ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","743","ImageResize","","Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)"
 [V],"CheckNeedCrop","CB_IMGPSScanImp.pas.bk","804","CheckNeedCrop","","Function CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像"
 [V],"CheckNeedCrop","CB_IMGPSScanImp.pas.bk","804","TDibGraphic","","Function CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像"
 [V],"Initialize","CB_IMGPSScanImp.pas.bk","1044","TDibGraphic","","EnPrint,  { for TEnvisionPrintMode, TDibGraphicPrinter }"
@@ -36,6 +36,7 @@
 [V],"TCB_IMGPSScanX.PM302Click","CB_IMGPSScanImp.pas.bk","3483","ifGray256","","ScanColor := ifGray256;"
 [V],"TCB_IMGPSScanX.PM303Click","CB_IMGPSScanImp.pas.bk","3492","ifTrueColor","","ScanColor := ifTrueColor;"
 [V],"TCB_IMGPSScanX.PM510Click","CB_IMGPSScanImp.pas.bk","3664","DeskewImg","","DeskewImg(DisplayISB.Graphic);"
+[V],"TCB_IMGPSScanX.SampleScanBtnClick","CB_IMGPSScanImp.pas.bk","4015","BWTif2Jpg","","BWTif2Jpg(ImageScrollBox1.Graphic);"
 [V],"TCB_IMGPSScanX.StatrTwainScan","CB_IMGPSScanImp.pas.bk","4402","TTiffGraphic","","ScanInfo.Graphic := TTiffGraphic.Create;"
 [V],"TCB_IMGPSScanX.OnAcquire","CB_IMGPSScanImp.pas.bk","4455","TTiffGraphic","","iGraphic,iGraphic_First,iGraphic_sec : TTiffGraphic;"
 [V],"TCB_IMGPSScanX.OnAcquire","CB_IMGPSScanImp.pas.bk","4457","TJpegGraphic","","JpgGr : TJpegGraphic;"
@@ -61,17 +62,18 @@
 [V],"Deletepage","CB_IMGPSScanImp.pas.bk","4659","SaveQuality","","JpgGr.SaveQuality := FJpgCompression;"
 [V],"TCB_IMGPSScanX.GetSiteOMR","CB_IMGPSScanImp.pas.bk","5173","GetSiteOMR","","function TCB_IMGPSScanX.GetSiteOMR(FileName,Site:String;bt: Integer): Integer;"
 [V],"TCB_IMGPSScanX.GetSiteOMR","CB_IMGPSScanImp.pas.bk","5191","FindPoint","","FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'');"
+[V],"TCB_IMGPSScanX.GetSiteOMR","CB_IMGPSScanImp.pas.bk","5197","ClearLine","","ClearLine(ISB_BW.Graphic,bt);"
 [V],"TCB_IMGPSScanX.GetSiteOMR","CB_IMGPSScanImp.pas.bk","5222","Get_OMR","","result := Get_OMR(ISB_BW.Graphic,OMRRect);"
 [V],"TCB_IMGPSScanX.GetDefScanIni","CB_IMGPSScanImp.pas.bk","5366","Rotate","","Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_ROTATE_MODE' Then //掃瞄時旋轉角度"
 [V],"TCB_IMGPSScanX.GetDefScanIni","CB_IMGPSScanImp.pas.bk","5462","FJpgCompression","","FJpgCompression := StrToInt(PARA_CONTENT);"
-[V],"TCB_IMGPSScanX.CaseReSize","CB_IMGPSScanImp.pas.bk","6336","ImageResize","","ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放"
 [V],"TCB_IMGPSScanX.CaseReSize","CB_IMGPSScanImp.pas.bk","6336","ImageReSize_FormID","","ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放"
-[V],"TCB_IMGPSScanX.ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","6343","ImageResize","","Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放"
+[V],"TCB_IMGPSScanX.CaseReSize","CB_IMGPSScanImp.pas.bk","6336","ImageResize","","ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放"
 [V],"TCB_IMGPSScanX.ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","6343","ImageReSize_FormID","","Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放"
+[V],"TCB_IMGPSScanX.ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","6343","ImageResize","","Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放"
 [V],"TCB_IMGPSScanX.ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","6376","FindPoint","","//FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH);"
 [V],"TCB_IMGPSScanX.ImageReSize_FormID","CB_IMGPSScanImp.pas.bk","6379","CheckSize","","SizeStr := CheckSize(ISB_BW,UpLPoint,UpRPoint,DownLPoint,DW,DH);"
-[V],"TCB_IMGPSScanX.ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","6421","ImageResize","","Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)"
 [V],"TCB_IMGPSScanX.ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","6421","ImageReSize_tmp","","Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)"
+[V],"TCB_IMGPSScanX.ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","6421","ImageResize","","Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)"
 [V],"TCB_IMGPSScanX.ImageReSize_tmp","CB_IMGPSScanImp.pas.bk","6437","CheckSize","","SizeStr := CheckSize(ImageScrollBox1,UpLPoint,UpRPoint,DownLPoint,DW,DH);"
 [V],"TCB_IMGPSScanX.ImageScrollBox1NewGraphic","CB_IMGPSScanImp.pas.bk","6447","TDibGraphic","","procedure TCB_IMGPSScanX.ImageScrollBox1NewGraphic(const Graphic: TDibGraphic);"
 [V],"TCB_IMGPSScanX.ImageScrollBox1NewGraphic","CB_IMGPSScanImp.pas.bk","6453","ConvertToBW","","ConvertToBW(ISB_BW.Graphic);"
@@ -84,13 +86,17 @@
 [V],"TCB_IMGPSScanX.initParameter","CB_IMGPSScanImp.pas.bk","9301","ifTrueColor","","ScanColor := ifTrueColor ;"
 [V],"TCB_IMGPSScanX.SmoothCBClick","CB_IMGPSScanImp.pas.bk","9927","Image_Smooth","","Image_Smooth(ISB1.Graphic);"
 [V],"TCB_IMGPSScanX.Case2Mask","CB_IMGPSScanImp.pas.bk","9962","FindPoint","","//ParserPoint(CropMpsV.FindPoint(Anchor));"
+[V],"TCB_IMGPSScanX.Case2Mask","CB_IMGPSScanImp.pas.bk","9985","FieldMask","","FieldMask(ImageScrollBox1,SiteList.Text,'Mask',UpLPoint);"
+[V],"TCB_IMGPSScanX.Case2Mask","CB_IMGPSScanImp.pas.bk","9987","SaveAnnotation","","SaveAnnotation(ImageScrollBox1,DePath+S.Strings[i]);"
 [V],"TCB_IMGPSScanX.CheckNeedCrop","CB_IMGPSScanImp.pas.bk","9996","CheckNeedCrop","","Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像"
 [V],"TCB_IMGPSScanX.CheckNeedCrop","CB_IMGPSScanImp.pas.bk","9996","TDibGraphic","","Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像"
 [V],"TCB_IMGPSScanX.PrintImg","CB_IMGPSScanImp.pas.bk","10223","TDibGraphic","","GraphicPrinter : TDibGraphicPrinter;"
 [V],"PrintWithManualPrintJob","CB_IMGPSScanImp.pas.bk","10241","TDibGraphic","","property of the TDibGraphicPrinter object is used to specify the"
 [V],"PrintWithAutoPrintJob","CB_IMGPSScanImp.pas.bk","10274","TDibGraphic","","GraphicPrinter := TDibGraphicPrinter.Create;"
-[V],"TCB_IMGPSScanX.OMRCheckCase","CB_IMGPSScanImp.pas.bk","12510","ImageResize","","ImageReSize_FormID(CaseID,OMRFile);"
+[V],"PrintWithAutoPrintJob","CB_IMGPSScanImp.pas.bk","10286","Watermark","","watermark2(Image1.Picture.Bitmap,70,'',ImageScrollBox1.DisplayedGraphic);"
+[V],"PrintWithAutoPrintJob","CB_IMGPSScanImp.pas.bk","10286","Watermark2","","watermark2(Image1.Picture.Bitmap,70,'',ImageScrollBox1.DisplayedGraphic);"
 [V],"TCB_IMGPSScanX.OMRCheckCase","CB_IMGPSScanImp.pas.bk","12510","ImageReSize_FormID","","ImageReSize_FormID(CaseID,OMRFile);"
+[V],"TCB_IMGPSScanX.OMRCheckCase","CB_IMGPSScanImp.pas.bk","12510","ImageResize","","ImageReSize_FormID(CaseID,OMRFile);"
 [V],"TCB_IMGPSScanX.OMRCheckCase","CB_IMGPSScanImp.pas.bk","12545","GetSiteOMR","","//Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));"
 [V],"TCB_IMGPSScanX.OMRCheckCase","CB_IMGPSScanImp.pas.bk","12548","FindPoint","","//FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,ANCHOR);"
 [V],"TCB_IMGPSScanX.view_image_DocNo","CB_IMGPSScanImp.pas.bk","13278","DpiResize","","DpiResize(ISB.Graphic,36,False);"
diff --git a/scripts/dist/deps.all.csv b/scripts/dist/deps.all.csv
index 383a538..79313e7 100644
--- a/scripts/dist/deps.all.csv
+++ b/scripts/dist/deps.all.csv
@@ -5,10 +5,10 @@
 [V],Button6Click,CB_IMGPSScanImp.pas.bk,598,Rotate,,BarCodeRotate : Integer; //條碼要轉的角度
 [V],Button6Click,CB_IMGPSScanImp.pas.bk,615,FJpgCompression,,FJpgCompression:integer;// 20171211 jpg to tif 的壓縮率
 [V],GetSiteOMR,CB_IMGPSScanImp.pas.bk,674,GetSiteOMR,,function GetSiteOMR(FileName, Site: String;bt: Integer): Integer;
-[V],ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,742,ImageResize,,Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
 [V],ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,742,ImageReSize_FormID,,Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
-[V],ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,743,ImageResize,,Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
+[V],ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,742,ImageResize,,Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
 [V],ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,743,ImageReSize_tmp,,Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
+[V],ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,743,ImageResize,,Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
 [V],CheckNeedCrop,CB_IMGPSScanImp.pas.bk,804,CheckNeedCrop,,Function CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
 [V],CheckNeedCrop,CB_IMGPSScanImp.pas.bk,804,TDibGraphic,,Function CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
 [V],Initialize,CB_IMGPSScanImp.pas.bk,1044,TDibGraphic,,EnPrint,  { for TEnvisionPrintMode, TDibGraphicPrinter }
@@ -36,6 +36,7 @@
 [V],TCB_IMGPSScanX.PM302Click,CB_IMGPSScanImp.pas.bk,3483,ifGray256,,ScanColor := ifGray256;
 [V],TCB_IMGPSScanX.PM303Click,CB_IMGPSScanImp.pas.bk,3492,ifTrueColor,,ScanColor := ifTrueColor;
 [V],TCB_IMGPSScanX.PM510Click,CB_IMGPSScanImp.pas.bk,3664,DeskewImg,,DeskewImg(DisplayISB.Graphic);
+[V],TCB_IMGPSScanX.SampleScanBtnClick,CB_IMGPSScanImp.pas.bk,4015,BWTif2Jpg,,BWTif2Jpg(ImageScrollBox1.Graphic);
 [V],TCB_IMGPSScanX.StatrTwainScan,CB_IMGPSScanImp.pas.bk,4402,TTiffGraphic,,ScanInfo.Graphic := TTiffGraphic.Create;
 [V],TCB_IMGPSScanX.OnAcquire,CB_IMGPSScanImp.pas.bk,4455,TTiffGraphic,,iGraphic,iGraphic_First,iGraphic_sec : TTiffGraphic;
 [V],TCB_IMGPSScanX.OnAcquire,CB_IMGPSScanImp.pas.bk,4457,TJpegGraphic,,JpgGr : TJpegGraphic;
@@ -61,17 +62,18 @@
 [V],Deletepage,CB_IMGPSScanImp.pas.bk,4659,SaveQuality,,JpgGr.SaveQuality := FJpgCompression;
 [V],TCB_IMGPSScanX.GetSiteOMR,CB_IMGPSScanImp.pas.bk,5173,GetSiteOMR,,function TCB_IMGPSScanX.GetSiteOMR(FileName,Site:String;bt: Integer): Integer;
 [V],TCB_IMGPSScanX.GetSiteOMR,CB_IMGPSScanImp.pas.bk,5191,FindPoint,,FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'');
+[V],TCB_IMGPSScanX.GetSiteOMR,CB_IMGPSScanImp.pas.bk,5197,ClearLine,,ClearLine(ISB_BW.Graphic,bt);
 [V],TCB_IMGPSScanX.GetSiteOMR,CB_IMGPSScanImp.pas.bk,5222,Get_OMR,,result := Get_OMR(ISB_BW.Graphic,OMRRect);
 [V],TCB_IMGPSScanX.GetDefScanIni,CB_IMGPSScanImp.pas.bk,5366,Rotate,,Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_ROTATE_MODE' Then //掃瞄時旋轉角度
 [V],TCB_IMGPSScanX.GetDefScanIni,CB_IMGPSScanImp.pas.bk,5462,FJpgCompression,,FJpgCompression := StrToInt(PARA_CONTENT);
-[V],TCB_IMGPSScanX.CaseReSize,CB_IMGPSScanImp.pas.bk,6336,ImageResize,,ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放
 [V],TCB_IMGPSScanX.CaseReSize,CB_IMGPSScanImp.pas.bk,6336,ImageReSize_FormID,,ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放
-[V],TCB_IMGPSScanX.ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,6343,ImageResize,,Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
+[V],TCB_IMGPSScanX.CaseReSize,CB_IMGPSScanImp.pas.bk,6336,ImageResize,,ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放
 [V],TCB_IMGPSScanX.ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,6343,ImageReSize_FormID,,Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
+[V],TCB_IMGPSScanX.ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,6343,ImageResize,,Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
 [V],TCB_IMGPSScanX.ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,6376,FindPoint,,//FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH);
 [V],TCB_IMGPSScanX.ImageReSize_FormID,CB_IMGPSScanImp.pas.bk,6379,CheckSize,,SizeStr := CheckSize(ISB_BW,UpLPoint,UpRPoint,DownLPoint,DW,DH);
-[V],TCB_IMGPSScanX.ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,6421,ImageResize,,Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
 [V],TCB_IMGPSScanX.ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,6421,ImageReSize_tmp,,Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
+[V],TCB_IMGPSScanX.ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,6421,ImageResize,,Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
 [V],TCB_IMGPSScanX.ImageReSize_tmp,CB_IMGPSScanImp.pas.bk,6437,CheckSize,,SizeStr := CheckSize(ImageScrollBox1,UpLPoint,UpRPoint,DownLPoint,DW,DH);
 [V],TCB_IMGPSScanX.ImageScrollBox1NewGraphic,CB_IMGPSScanImp.pas.bk,6447,TDibGraphic,,procedure TCB_IMGPSScanX.ImageScrollBox1NewGraphic(const Graphic: TDibGraphic);
 [V],TCB_IMGPSScanX.ImageScrollBox1NewGraphic,CB_IMGPSScanImp.pas.bk,6453,ConvertToBW,,ConvertToBW(ISB_BW.Graphic);
@@ -84,13 +86,17 @@
 [V],TCB_IMGPSScanX.initParameter,CB_IMGPSScanImp.pas.bk,9301,ifTrueColor,,ScanColor := ifTrueColor ;
 [V],TCB_IMGPSScanX.SmoothCBClick,CB_IMGPSScanImp.pas.bk,9927,Image_Smooth,,Image_Smooth(ISB1.Graphic);
 [V],TCB_IMGPSScanX.Case2Mask,CB_IMGPSScanImp.pas.bk,9962,FindPoint,,//ParserPoint(CropMpsV.FindPoint(Anchor));
+[V],TCB_IMGPSScanX.Case2Mask,CB_IMGPSScanImp.pas.bk,9985,FieldMask,,FieldMask(ImageScrollBox1,SiteList.Text,'Mask',UpLPoint);
+[V],TCB_IMGPSScanX.Case2Mask,CB_IMGPSScanImp.pas.bk,9987,SaveAnnotation,,SaveAnnotation(ImageScrollBox1,DePath+S.Strings[i]);
 [V],TCB_IMGPSScanX.CheckNeedCrop,CB_IMGPSScanImp.pas.bk,9996,CheckNeedCrop,,Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
 [V],TCB_IMGPSScanX.CheckNeedCrop,CB_IMGPSScanImp.pas.bk,9996,TDibGraphic,,Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
 [V],TCB_IMGPSScanX.PrintImg,CB_IMGPSScanImp.pas.bk,10223,TDibGraphic,,GraphicPrinter : TDibGraphicPrinter;
 [V],PrintWithManualPrintJob,CB_IMGPSScanImp.pas.bk,10241,TDibGraphic,,property of the TDibGraphicPrinter object is used to specify the
 [V],PrintWithAutoPrintJob,CB_IMGPSScanImp.pas.bk,10274,TDibGraphic,,GraphicPrinter := TDibGraphicPrinter.Create;
-[V],TCB_IMGPSScanX.OMRCheckCase,CB_IMGPSScanImp.pas.bk,12510,ImageResize,,ImageReSize_FormID(CaseID,OMRFile);
+[V],PrintWithAutoPrintJob,CB_IMGPSScanImp.pas.bk,10286,Watermark,,watermark2(Image1.Picture.Bitmap,70,'',ImageScrollBox1.DisplayedGraphic);
+[V],PrintWithAutoPrintJob,CB_IMGPSScanImp.pas.bk,10286,Watermark2,,watermark2(Image1.Picture.Bitmap,70,'',ImageScrollBox1.DisplayedGraphic);
 [V],TCB_IMGPSScanX.OMRCheckCase,CB_IMGPSScanImp.pas.bk,12510,ImageReSize_FormID,,ImageReSize_FormID(CaseID,OMRFile);
+[V],TCB_IMGPSScanX.OMRCheckCase,CB_IMGPSScanImp.pas.bk,12510,ImageResize,,ImageReSize_FormID(CaseID,OMRFile);
 [V],TCB_IMGPSScanX.OMRCheckCase,CB_IMGPSScanImp.pas.bk,12545,GetSiteOMR,,//Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));
 [V],TCB_IMGPSScanX.OMRCheckCase,CB_IMGPSScanImp.pas.bk,12548,FindPoint,,//FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,ANCHOR);
 [V],TCB_IMGPSScanX.view_image_DocNo,CB_IMGPSScanImp.pas.bk,13278,DpiResize,,DpiResize(ISB.Graphic,36,False);
diff --git a/scripts/list_image_dependencies.js b/scripts/list_image_dependencies.js
index d43faed..afcdfa9 100644
--- a/scripts/list_image_dependencies.js
+++ b/scripts/list_image_dependencies.js
@@ -16,40 +16,63 @@
 ])).join('|')
 // 您提供的關鍵字 (以 | 分隔)
 const keywordsStr = Array.from(new Set([
+  'BWTif2Jpg',
+  'BmpConverJpg',
   'BrightnessImg', // iis_image_process
   'CheckNeedCrop',
   'CheckSize',
   'CleanupBorder',
+  'ClearLine',
   'Color2BW_RTS', //  iis_image_process
+  'Color2tif',
+  'ConvertTo256Gray',
   'ConvertToBW',
   'ConvertToGray',
+  'CreateDraft',
+  'CreateNote',
+  'CreateReportImg',
   'CreateReportImg_JSON', // iis_image_process
   'CreateStamp', // iis_image_process
   'CropImg',
   'DeskewImg',
   'DpiResize',
+  'DrawPointLine',
+  'Emboss',
+  'FieldMask',
   'FilterColor', // iis_image_process
   'FindBlackPoint', // iis_image_process
   'FindPoint',
-  'GetSiteOMR',
   'GetBlackSpots', // iis_image_process
+  'GetExif_CaptureDateTime',
+  'GetPixBW',
+  'GetPosAngle',
+  'GetSelectRect',
   'GetSelectRect2String', // iis_image_process
+  'GetSelectRect_Back',
+  'GetSelectRect_Black2String',
+  'GetSiteOMR',
   'GetTag', //
   'Get_OMR',
   'Gray2BW_RTS', // iis_image_process
-  'ImageResize', // iis_image_process
   'ImageProcessor.anchorAnalyzer',
   'ImageProcessor.barcodeRecognizer',
   'ImageProcessor.converter',
   'ImageProcessor.transformer',
   'ImageReSize_FormID',
   'ImageReSize_tmp',
+  'ImageResize',
+  'ImageResize', // iis_image_process
   'Image_Smooth',
+  'JpgReSize_Exif',
   'JpgReSize_Exif', // iis
   'MpsGetBarcode',
   'NegativeImg',
+  'NegativeImg',
   'PrintBarcode', // iis
   'Rotate',
+  'SaveAnnotation',
+  'SetSelectRect',
+  'SetSelectRect_Original',
   'SetTag', // iis
   'ShowKeyinRect', // iis
   'TDibGraphic',
@@ -57,7 +80,12 @@
   'TNBCleanupBorderTransform', // iis
   'TTiffGraphic',
   'TWatermarkTransform', // iis
+  'Watermark',
+  'Watermark1',
   'Watermark1_Hong', // iis
+  'Watermark1_Hong_New',
+  'Watermark2',
+
   // 以下可省
   'CleanupBorder',
   'ConvertToBW',

--
Gitblit v1.8.0