curtis
14小時前 3af5c004b4f2d2005d22ee85dccc2c80a66b1556
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
{ ==============================================================================
  方法名稱:ImageReSize_FormID
  引用相依:ImageReSize_FormID, FindPoint, CheckSize, LoadFromFile, SaveToFile, 
            FileExists, LoadFileGetMD5
  方法描述:根據表單的十字定位點或邊框 (ANCHOR/FRAME) 對掃瞄影像進行縮放調整。流
            程如下:
            1. 從 FORM_INF_List 取得表單預設高寬與定位類型。
            2. 載入對應案件下的影像檔,若為補件模式則跳過原有圖檔。
            3. 呼叫 FindPoint 尋找影像中的十字線或邊框。
            4. 呼叫 CheckSize 計算偏移與縮放比例。
            5. 呼叫 ImageResize 執行實際調整。
            6. 成功縮放後,記錄檔案 MD5 並儲存更新後的影像,同時將操作記錄寫入 ReS
            ize.dat;若定位點遺失或辨識錯誤,則記錄於 AnchorError.dat。
============================================================================== }
Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
var
  FormID : String;
  DH,DW : String;
  NowW,NowH : Integer;
  ANCHOR : String; //是否有十字線
  SizeStr : String;
  S : TStringlist;
  v,v1:Integer;
  IsRecordMD5:Boolean;
begin
  IsRecordMD5:=False;
  FormID := FileName2FormCode(FileName);
  if FormID = '' then Exit;
 
  IF FindSQLData(FORM_INF_List,'T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
  begin
    DH := GetFindResult('T1.FORM_HEIGHT');
    DW := GetFindResult('T1.FORM_WIDTH');
    ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
    ANCHOR := Index2Anchor(ANCHOR);
Display1.Lines.Add(FormID+','+DH+','+DW);
//ShowMessage('AAAAAAAAA');
    if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then  //有十字定位點
    begin
//ShowMessage('BBBBBBB');
      ImageScrollBox1.LoadFromFile(ImageSavePath+CaseID+'\Upload\'+FileName,1);
 
      if (FWH_category='N') and  ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName) then
      begin
        Exit;//20171103  補件  原有的圖不作resize
      end;
 
      //FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH);
      FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
 
      SizeStr := CheckSize(ISB_BW,UpLPoint,UpRPoint,DownLPoint,DW,DH);
      ImageResize(ImageScrollBox1.Graphic,ISB_BW.Graphic.Width,ISB_BW.Graphic.Height);
 
      FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
      v := 5;
      v1 := length(SizeStr);
      IF (SizeStr <> '') and (Copy(SizeStr,1,v) <> 'ERROR') then
      begin
//ShowMessage('CCCCC');
        if (ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName)) and (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName))=-1) then
        begin
          IsRecordMD5:=True;
        end;
        ImageScrollBox1.SaveToFile(ImageSavePath+CaseID+'\Upload\'+FileName);
        if IsRecordMD5 then
        begin
          reSizeExistImgList.add(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName));
        end;
//showmessage(ImageSavePath+CaseID+'\Upload\'+FileName);
        S := TStringlist.Create;                     ///20110422拿掉 換成上傳才做
        if FileExists(ImageSavePath+CaseID+'\Upload\ReSize.dat') then
          S.LoadFromFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
        //S.Add(FormCode2FormName(FormID)+' '+SizeStr);
        S.Add(FileName+','+SizeStr+#8+DateTimetoStr(Now));
        S.SaveToFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
        S.Free;
      end;
      if (Copy(SizeStr,1,v) = 'ERROR') then   //未找到三個定位點
      begin
        S := TStringlist.Create;
        if FileExists(ImageSavePath+CaseID+'\Upload\AnchorError.dat') then
          S.LoadFromFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
        S.Add(FileName+'-->'+Copy(SizeStr,V+1,V1-v));
        S.SaveToFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
        S.Free;
      end;
 
      ImageScrollBox1.FileName := '';
    end;
  end;
end;
 
 
{ ==============================================================================
  方法名稱:ImageReSize_tmp
  引用相依:ImageReSize_tmp, CheckSize, LoadFromFile, SaveToFile
  方法描述:針對暫存影像檔案執行十字定位點縮放處理。此方法是 ImageReSize_FormID 
            的簡化版本,主要針對暫存檔 (FileName) 與指定的 FormID。邏輯包含從資料
            庫清單查詢表單尺寸與定位模式,若符合 ANCHOR 或 FRAME 類型,則載入影像
            並呼叫 CheckSize 檢查是否需要調整。若偵測到影像存在偏移或比例差異(Siz
            eStr 非空),則將調整後的影像直接覆蓋儲存回原始路徑。
============================================================================== }
Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
var
  DH,DW : String;
  ANCHOR : String; //是否有十字線
  SizeStr : String;
  S : TStringlist;
begin
  IF FindSQLData(FORM_INF_List,'T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
  begin
    DH := GetFindResult('T1.FORM_HEIGHT');
    DW := GetFindResult('T1.FORM_WIDTH');
    ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
    ANCHOR := Index2Anchor(ANCHOR);
    if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then  //有十字定位點
    begin
      ImageScrollBox1.LoadFromFile(FileName,1);
      SizeStr := CheckSize(ImageScrollBox1,UpLPoint,UpRPoint,DownLPoint,DW,DH);
      IF SizeStr <> '' then
      begin
        ImageScrollBox1.SaveToFile(FileName);
      end;
      ImageScrollBox1.FileName := '';
    end;
  end;
end;
 
 
{ ==============================================================================
  方法名稱:CheckNeedCrop
  引用相依:TDibGraphic, CheckNeedCrop
  方法描述:判斷掃瞄影像是否為 A3 尺寸並需要進行切割(Crop)。判定邏輯有二:首先,檢
            查影像寬度是否大於 4 倍的 DPI 閥值,藉此初步判斷為大尺寸掃瞄件;其次,
            遍歷目前的條碼清單 (MpsBarcodeinf),統計有效的表單代碼 (FormID) 數量。
            如果影像寬度達標且有效表單數量正好為 2,則返回 True。這代表此張大圖實
            際上是由兩份 A4 表單併排掃瞄而成,後續需依此旗標進行影像分割處理。
============================================================================== }
Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
Var
  i,FormIDCount : Integer;
begin
  Result := False;
  FormIDCount := 0;
  if (Graphic.Width > (4 * Graphic.XDotsPerInch)) {or (Graphic.Height > (15 * Graphic.YDotsPerInch))} then
  //if (Graphic.Width > (6 * Graphic.XDotsPerInch)) then
  begin
    for I := 1 to MpsBarcodeinf.Count do
    begin
      if (Length(MpsBarcodeinf.Text[i])=FormIDLength) and FormIDExists(MpsBarcodeinf.Text[i],False,0) then
      begin
        inc(FormIDCount);
      end;
    end;
 
  end;
 
//ShowMessage('FormIDCount='+IntToStr(FormIDCount)+#10#13+'MpsBarcodeinf.count='+IntToStr(MpsBarcodeinf.count));
  if FormIDCount = 2 then
  begin
    Result := True;
  end;
end;