{ ============================================================================== 方法名稱:GetSiteOMR 引用相依:GetSiteOMR, FindPoint, Get_OMR, LoadFromFile 方法描述:在指定影像文件的特定座標執行 OMR (光學標記辨識)。核心邏輯包含: 1. 檢查並載入影像檔(若尚未載入),並呼叫 ClearLine 初始化黑白緩衝區。 2. 讀取影像的 DPI 與寬高資訊。 3. 使用 CM_Str2Rect 將 Site 字串轉為 TRect 矩陣,並參考定位點 (UpLPoi nt) 進行位移計算。 4. 限制辨識區域座標不超出影像邊界。 5. 呼叫 Get_OMR 對黑白圖形緩衝區執行辨識並返回結果值(通常為 1 或 0)。 此方法是自動化資料檢核的重要工具。 ============================================================================== } function TCB_IMGPSScanX.GetSiteOMR(FileName,Site:String;bt: Integer): Integer; var OMRRect : TRect; Xdpi,Ydpi : Integer; W,H : Integer; begin Result := 0; //ShowMessage('GetSiteOMR'); IF (ImageScrollBox1.FileName <> FileName) and (FileName <> '') then begin //ShowMessage('11111'+ImageScrollBox1.FileName+#10#13+FileName); ImageScrollBox1.LoadFromFile(FileName,1); { ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+ 'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+ 'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+ 'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y)); FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,''); ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+ 'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+ 'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+ 'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y)); } ClearLine(ISB_BW.Graphic,bt); ISB_BW.Redraw(True); Application.ProcessMessages; end; If ImageScrollBox1.FileName <> '' Then begin //ShowMessage('22222'+ImageScrollBox1.FileName); Xdpi := ImagescrollBox1.Graphic.XDotsPerInch; Ydpi := ImagescrollBox1.Graphic.YDotsPerInch; H := ImageScrollBox1.Graphic.Height; W := ImageScrollBox1.Graphic.Width; //ShowMessage('Xdpi='+IntToStr(Xdpi)+#10#13+'Ydpi='+IntToStr(Ydpi)+#10#13+'H='+IntToStr(H)+#10#13+'W='+IntToStr(W)+#10#13); //ShowMessage('Site='+Site); OMRRect := CM_Str2Rect(Site,Xdpi,UpLPoint); Display1.Lines.Add('UpLPoint=('+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+');'+Site+';'+IntToStr(OMRRect.Left)+','+IntToStr(OMRRect.top)+','+IntToStr(OMRRect.Right)+','+IntToStr(OMRRect.Bottom)); if OMRRect.Left < 0 then OMRRect.Left := 0; if OMRRect.Top < 0 then OMRRect.Top := 0; if OMRRect.Right > ImageScrollBox1.Graphic.Width then OMRRect.Right := ImageScrollBox1.Graphic.Width; if OMRRect.Bottom > ImageScrollBox1.Graphic.Height then OMRRect.Bottom := ImageScrollBox1.Graphic.Height; result := Get_OMR(ISB_BW.Graphic,OMRRect); //ShowMessage('result='+IntToStr(result)); end; end;