2
Copyright (c) 1993-2008, Cognitive Technologies
5
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
8
* ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
���� ����������� �� ��������� �����, ���� ������ ������� � �����������
11
* ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
������ ����������, ������������ ��� ���������������, ������ �����������
13
��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
����������� ����� �� ��������.
15
* �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
���� ������������ � �������� �������� ��������� �/��� �����������
17
���������, ���������� �� ���� ��, ��� ���������������� �����������
20
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
������������� ������, ��������� � �������������� ��� ���������� ����������
27
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
33
Redistribution and use in source and binary forms, with or without modification,
34
are permitted provided that the following conditions are met:
36
* Redistributions of source code must retain the above copyright notice,
37
this list of conditions and the following disclaimer.
38
* Redistributions in binary form must reproduce the above copyright notice,
39
this list of conditions and the following disclaimer in the documentation
40
and/or other materials provided with the distribution.
41
* Neither the name of the Cognitive Technologies nor the names of its
42
contributors may be used to endorse or promote products derived from this
43
software without specific prior written permission.
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2
Copyright (c) 1993-2008, Cognitive Technologies
5
Разрешается повторное распространение и использование как в виде исходного кода,
6
так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
8
* При повторном распространении исходного кода должны оставаться указанное
9
выше уведомление об авторском праве, этот список условий и последующий
11
* При повторном распространении двоичного кода в документации и/или в
12
других материалах, поставляемых при распространении, должны сохраняться
13
указанная выше информация об авторском праве, этот список условий и
14
последующий отказ от гарантий.
15
* Ни название Cognitive Technologies, ни имена ее сотрудников не могут
16
быть использованы в качестве средства поддержки и/или продвижения
17
продуктов, основанных на этом ПО, без предварительного письменного
20
ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
21
ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
22
ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
23
ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
24
МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
25
НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
26
ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
27
НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
28
СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
29
ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
30
НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
31
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
33
Redistribution and use in source and binary forms, with or without modification,
34
are permitted provided that the following conditions are met:
36
* Redistributions of source code must retain the above copyright notice,
37
this list of conditions and the following disclaimer.
38
* Redistributions in binary form must reproduce the above copyright notice,
39
this list of conditions and the following disclaimer in the documentation
40
and/or other materials provided with the distribution.
41
* Neither the name of the Cognitive Technologies nor the names of its
42
contributors may be used to endorse or promote products derived from this
43
software without specific prior written permission.
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57
57
// ============================================================================
178
175
Bool32 gbNOHBORDER = FALSE;
179
176
Bool32 gbNOVBORDER = FALSE;
181
CIMAGEIMAGECALLBACK cbk;
178
CIMAGEIMAGECALLBACK cbk;
187
Word16 min_h_len = 40,
193
int MinHorLenForTrue = 129;//113;//���� 100
194
int MinVerLenForTrue = 94;//58; //���� 50
183
uint16_t min_h_len = 40, min_v_len = 40;
188
int MinHorLenForTrue = 129;//113;//было 100
189
int MinVerLenForTrue = 94;//58; //было 50
195
190
//////////////////////////////////////////////////////////////////////////////////////////////
197
void SetReturnCode_rline( Word32 );
198
void SetReturnCode_rline( Word16 );
199
void CleanLineData( void* pdata,int size);
202
Bool16 SampleImageOpen (CIMAGE_ImageInfo* lpImageInfo)
203
{ return swp_imxs->f_op( (Imxs_ImageInfo*)lpImageInfo ); }
204
Word16 SampleImageRead ( PInt8 lpImage, Word16 wMaxSize)
205
{ return swp_imxs->f_re( (Word8*)lpImage, wMaxSize ); }
206
Bool16 SampleImageClose ( void )
207
{ return swp_imxs->f_cl( ); }
210
Bool16 DibOpen (Imxs_ImageInfo* lpImageInfo)
211
{ return cbk.CIMAGE_ImageOpen( (CIMAGE_ImageInfo*)lpImageInfo ); }
212
Int16 DibRead ( Word8* lpImage, Word16 wMaxSize)
213
{ return cbk.CIMAGE_ImageRead( (PInt8)lpImage, wMaxSize ); }
214
Bool16 DibClose ( void )
215
{ return cbk.CIMAGE_ImageClose( ); }
219
Bool32 RLINE_SubInit ( void )
221
hMainWindow = LDPUMA_CreateWindow( NULL, NULL );
223
LDPUMA_Registry(&hMainDebug,SNAP_ROOT_MAIN_DEBUG,NULL);
225
LDPUMA_Registry(&RLINE_Root,SNAP_ROOT_LINES, NULL); // ����������� ������� �������
192
void SetReturnCode_rline(uint32_t);
193
void SetReturnCode_rline(uint16_t);
194
void CleanLineData(void* pdata, int size);
196
Bool16 SampleImageOpen(CIMAGE_ImageInfo* lpImageInfo) {
197
return swp_imxs->f_op((Imxs_ImageInfo*) lpImageInfo);
199
uint16_t SampleImageRead(pchar lpImage, uint16_t wMaxSize) {
200
return swp_imxs->f_re((uchar*) lpImage, wMaxSize);
202
Bool16 SampleImageClose(void) {
203
return swp_imxs->f_cl();
206
Bool16 DibOpen(Imxs_ImageInfo* lpImageInfo) {
207
return cbk.CIMAGE_ImageOpen((CIMAGE_ImageInfo*) lpImageInfo);
209
int16_t DibRead(uchar* lpImage, uint16_t wMaxSize) {
210
return cbk.CIMAGE_ImageRead((pchar) lpImage, wMaxSize);
212
Bool16 DibClose(void) {
213
return cbk.CIMAGE_ImageClose();
216
Bool32 RLINE_SubInit(void) {
217
hMainWindow = LDPUMA_CreateWindow(NULL, NULL);
219
LDPUMA_Registry(&hMainDebug, SNAP_ROOT_MAIN_DEBUG, NULL);
221
LDPUMA_Registry(&RLINE_Root, SNAP_ROOT_LINES, NULL); // регистрация вершины отладки
227
223
LDPUMA_Registry(&hRLINE_Pass1, SNAP_PASS1_LINES, RLINE_Root);
228
224
LDPUMA_Registry(&hRLINE_Pass2, SNAP_PASS2_LINES, RLINE_Root);
229
LDPUMA_RegistryHelp(hRLINE_Pass2, "��� ��������� - ���������� II ������", FALSE);
230
LDPUMA_RegVariable(hRLINE_Pass2, "���������� (%) ��� �����. �����", &hRLINE_Pass2Lost1, "long");
231
LDPUMA_RegVariable(hRLINE_Pass2, "���������� (%) ��� �����. �����", &hRLINE_Pass2Lost2, "long");
225
LDPUMA_RegistryHelp(hRLINE_Pass2, "При выделении - пропустить II проход",
227
LDPUMA_RegVariable(hRLINE_Pass2, "Почернение (%) при подтв. линии",
228
&hRLINE_Pass2Lost1, "long");
229
LDPUMA_RegVariable(hRLINE_Pass2, "Почернение (%) без подтв. линии",
230
&hRLINE_Pass2Lost2, "long");
232
231
LDPUMA_Registry(&hRLINE_Pass3, SNAP_PASS3_LINES, RLINE_Root);
234
LDPUMA_Registry(&RLINE_Search,"����� LNS", hRLINE_Pass1); // ����������� ������� �������
233
LDPUMA_Registry(&RLINE_Search, "Линии LNS", hRLINE_Pass1); // регистрация вершины отладки
235
234
LDPUMA_RegistryHelp(RLINE_Search,
236
"��������� ����� ����� ��������� LNS32.DLL.", FALSE);
237
LDPUMA_Registry(&hRLINE_Correct, "��������� ����� LNS", hRLINE_Pass1);
238
LDPUMA_RegistryHelp(hRLINE_Correct,
239
"��������� �����, ��������� LNS.", FALSE);
241
LDPUMA_Registry(&hRLINE_CorrectOutput,"��������� ��������� �����", hRLINE_Correct);
242
LDPUMA_Registry(&hRLINE_CorrectDrawLines,"�������� ����������������� ����� (I)", hRLINE_CorrectOutput);
243
LDPUMA_Registry(&hRLINE_CorrectDrawFrags,"�������� ��������� ����� (I)", hRLINE_CorrectOutput);
244
LDPUMA_Registry(&hRLINE_CorrectDebug,"������� ��������� �����", hRLINE_Correct);
245
LDPUMA_Registry(&hRLINE_CorrectDebugFrag, "������������ ������������ �� LNS", hRLINE_CorrectDebug);
246
LDPUMA_RegistryHelp(hRLINE_CorrectDebugFrag, "�.�. �� ��������������������� ����� ��� ���������", FALSE);
247
LDPUMA_Registry(&hRLINE_CorrectControl,"�������� ��������� �����", hRLINE_Correct);
248
LDPUMA_Registry(&Part2,"������������ ��������� �����", hRLINE_Correct);
250
LDPUMA_Registry(&hRLINE_Pass3Input,"������� ������ III �������", hRLINE_Pass3);
251
LDPUMA_Registry(&hRLINE_Pass3Output,"��������� III �������", hRLINE_Pass3);
252
LDPUMA_Registry(&hRLINE_Pass3DrawLines,"�������� ����� (III)", hRLINE_Pass3Output);
253
LDPUMA_Registry(&hRLINE_Pass3DrawFrags,"�������� ��������� ����� (III)", hRLINE_Pass3Output);
254
LDPUMA_Registry(&hRLINE_Pass3_Control,"�������� �������� �������",hRLINE_Pass3);
255
LDPUMA_Registry(&Part3,"������������ �������� �������",hRLINE_Pass3);
257
LDPUMA_Registry(&hRLINE_Search_Output, "��������� LNS", RLINE_Search);
258
LDPUMA_Registry(&hRLINE_Search_Debug, "������� LNS", RLINE_Search);
260
//LDPUMA_Registry(&RLINE_NoFillgap,"�� ��������� '������������' �����", RLINE_Root); // ����������� ������� �������
261
LDPUMA_Registry(&RLINE_NoFillgap,"��������� '������������' �����", hRLINE_Search_Debug); // ����������� ������� �������
262
LDPUMA_RegistryHelp(RLINE_NoFillgap,
263
"��� '�������������' ���������� ��������� ������� ����� �� 3 �������. ���� ����� ������������ \
264
��� ������ � ������������ �� ���������� ��������.", FALSE);
265
//LDPUMA_Registry(&RLINE_NoHorBorder,"�� �������� �������������� ����", RLINE_Root); // ����������� ������� �������
266
LDPUMA_Registry(&RLINE_NoHorBorder,"�������� �������������� ����", hRLINE_Search_Debug); // ����������� ������� �������
235
"Выполнить поиск линий используя LNS32.DLL.", FALSE);
236
LDPUMA_Registry(&hRLINE_Correct, "Коррекция линий LNS", hRLINE_Pass1);
237
LDPUMA_RegistryHelp(hRLINE_Correct, "Коррекция линий, найденных LNS.",
240
LDPUMA_Registry(&hRLINE_CorrectOutput, "Результат коррекции линий",
242
LDPUMA_Registry(&hRLINE_CorrectDrawLines,
243
"Рисовать скорректированные линии (I)", hRLINE_CorrectOutput);
244
LDPUMA_Registry(&hRLINE_CorrectDrawFrags, "Рисовать фрагменты линий (I)",
245
hRLINE_CorrectOutput);
246
LDPUMA_Registry(&hRLINE_CorrectDebug, "Отладка коррекции линий",
248
LDPUMA_Registry(&hRLINE_CorrectDebugFrag,
249
"Использовать фрагментацию от LNS", hRLINE_CorrectDebug);
250
LDPUMA_RegistryHelp(hRLINE_CorrectDebugFrag,
251
"т.е. не перефрагментировывать линию при коррекции", FALSE);
252
LDPUMA_Registry(&hRLINE_CorrectControl, "Контроль коррекции линий",
254
LDPUMA_Registry(&Part2, "Этапирование коррекции линий", hRLINE_Correct);
256
LDPUMA_Registry(&hRLINE_Pass3Input, "Входные данные III прохода",
258
LDPUMA_Registry(&hRLINE_Pass3Output, "Результат III прохода", hRLINE_Pass3);
259
LDPUMA_Registry(&hRLINE_Pass3DrawLines, "Рисовать линии (III)",
261
LDPUMA_Registry(&hRLINE_Pass3DrawFrags, "Рисовать фрагменты линий (III)",
263
LDPUMA_Registry(&hRLINE_Pass3_Control, "Контроль третьего прохода",
265
LDPUMA_Registry(&Part3, "Этапирование третьего прохода", hRLINE_Pass3);
267
LDPUMA_Registry(&hRLINE_Search_Output, "Результат LNS", RLINE_Search);
268
LDPUMA_Registry(&hRLINE_Search_Debug, "Отладка LNS", RLINE_Search);
270
//LDPUMA_Registry(&RLINE_NoFillgap,"Не выполнять 'размазывание' линий", RLINE_Root); // регистрация вершины отладки
271
LDPUMA_Registry(&RLINE_NoFillgap, "Выполнить 'размазывание' линий",
272
hRLINE_Search_Debug); // регистрация вершины отладки
275
"Под 'размазыванием' понимается удлинение базовых линий на 3 пиксела. Этот режим используется \
276
при работе с изображением от матричного принтера.",
278
//LDPUMA_Registry(&RLINE_NoHorBorder,"Не выделять горизонтальные поля", RLINE_Root); // регистрация вершины отладки
279
LDPUMA_Registry(&RLINE_NoHorBorder, "Выделять горизонтальные поля",
280
hRLINE_Search_Debug); // регистрация вершины отладки
267
281
LDPUMA_RegistryHelp(RLINE_NoHorBorder,
268
"����������� ������ ��������� ��������� �������� �����������", FALSE); // ����������� ������� �������
269
//LDPUMA_Registry(&RLINE_NoVerBorder,"�� �������� ������������ ����", RLINE_Root); // ����������� ������� �������
270
LDPUMA_Registry(&RLINE_NoVerBorder,"�������� ������������ ����", hRLINE_Search_Debug); // ����������� ������� �������
282
"Специальный случай обработки граничных участков изображения",
283
FALSE); // регистрация вершины отладки
284
//LDPUMA_Registry(&RLINE_NoVerBorder,"Не выделять вертикальные поля", RLINE_Root); // регистрация вершины отладки
285
LDPUMA_Registry(&RLINE_NoVerBorder, "Выделять вертикальные поля",
286
hRLINE_Search_Debug); // регистрация вершины отладки
271
287
LDPUMA_RegistryHelp(RLINE_NoVerBorder,
272
"����������� ������ ��������� ��������� �������� �����������", FALSE); // ����������� ������� �������
274
LDPUMA_Registry(&RLINE_ShowLines,"���������� ����� ����� ���������", hRLINE_Search_Output); // ����������� ������� �������
275
LDPUMA_RegistryHelp(RLINE_ShowLines,
276
"���������� ����� ����� ���������", FALSE); // ����������� ������� �������
277
LDPUMA_Registry(&hRLINE_Search_Output_ShowFrags,"���������� ��������� ����� LNS", hRLINE_Search_Output); // ����������� ������� �������
278
LDPUMA_RegistryHelp(hRLINE_Search_Output_ShowFrags,
279
"���������� ��������� ����� ����� ��������� (��������, ���� ��� ��������� ����� �� ������ ������� ������������ ������������ LNS)", FALSE); // ����������� ������� �������
281
LDPUMA_Registry(&hWriteLineInFile, "������ ����� ����� ���������", hRLINE_CorrectControl);
282
LDPUMA_RegistryHelp(hWriteLineInFile, "�������� ���������� ������� ������� � ���� lines.res", FALSE);
284
LDPUMA_Registry(&hWriteLineInFile3, "������ ����������� ������ �������� ������� �� ������", hRLINE_Pass3_Control);
285
LDPUMA_RegistryHelp(hWriteLineInFile3, "�������� ���������� �������� ������� � ���� lines3.res", FALSE);
287
/* //������� ���������� � RStuff
288
LDPUMA_Registry(&RLINE_ShowWithoutLines,"�������� ����������� ����� ������ �����", RLINE_Root); // ����������� ������� �������
289
LDPUMA_RegistryHelp(RLINE_ShowWithoutLines,
290
"�������� ����������� ����� ������ �����", FALSE); // ����������� ������� �������
292
// LDPUMA_Registry (&hUseCLine,"������ � ����������� �����",NULL);
294
LDPUMA_Registry(&Parts,"������������ ������� � �������� �������",RLINE_Root);
295
LDPUMA_RegistryHelp(Parts,"������������ ������� � �������� ������� �� ������",FALSE);
297
// LDPUMA_Registry(&Part2,"������ ������",Parts);
298
LDPUMA_Registry(&Prep2,"���������������� ����� (2)",Part2);
299
LDPUMA_Registry(&MainWork2,"�������������� ����� (2)",Part2);
300
LDPUMA_Registry(&PutContainer2,"������� � ��������� (2)",Part2);
301
LDPUMA_Registry(&Epilog2,"������ (2)",Part2);
302
LDPUMA_Registry(&Exit2,"����� �� ������� (2)",Part2);
304
// LDPUMA_Registry(&Part3,"������ ������",Parts);
305
LDPUMA_Registry(&GetContainer3,"������ �� ���������� (3)",Part3);
306
LDPUMA_Registry(&MainWork3,"�������������� ����� (3)",Part3);
307
LDPUMA_Registry(&PutContainer3,"������� � ��������� (3)",Part3);
308
LDPUMA_Registry(&Exit3,"����� �� ������� (3)",Part3);
288
"Специальный случай обработки граничных участков изображения",
289
FALSE); // регистрация вершины отладки
291
LDPUMA_Registry(&RLINE_ShowLines, "Показывать линии после выделения",
292
hRLINE_Search_Output); // регистрация вершины отладки
293
LDPUMA_RegistryHelp(RLINE_ShowLines, "Показывать линии после выделения",
294
FALSE); // регистрация вершины отладки
295
LDPUMA_Registry(&hRLINE_Search_Output_ShowFrags,
296
"Показывать фрагменты линий LNS", hRLINE_Search_Output); // регистрация вершины отладки
298
hRLINE_Search_Output_ShowFrags,
299
"Показывать фрагменты линий после выделения (работает, если при коррекции линий на первом проходе используется фрагментация LNS)",
300
FALSE); // регистрация вершины отладки
302
LDPUMA_Registry(&hWriteLineInFile, "Отпись линий после коррекции",
303
hRLINE_CorrectControl);
304
LDPUMA_RegistryHelp(hWriteLineInFile,
305
"Записать результаты первого прохода в файл lines.res", FALSE);
307
LDPUMA_Registry(&hWriteLineInFile3,
308
"Отпись результатов работы третьего прохода по линиям",
309
hRLINE_Pass3_Control);
310
LDPUMA_RegistryHelp(hWriteLineInFile3,
311
"Записать результаты третьего прохода в файл lines3.res", FALSE);
313
/* //вершина перенесена в RStuff
314
LDPUMA_Registry(&RLINE_ShowWithoutLines,"Показать изображение после снятия линий", RLINE_Root); // регистрация вершины отладки
315
LDPUMA_RegistryHelp(RLINE_ShowWithoutLines,
316
"Показать изображение после снятия линий", FALSE); // регистрация вершины отладки
318
// LDPUMA_Registry (&hUseCLine,"Работа с контейнером линий",NULL);
320
LDPUMA_Registry(&Parts,"Этапирование второго и третьего прохода",RLINE_Root);
321
LDPUMA_RegistryHelp(Parts,"Этапирование второго и третьего прохода по линиям",FALSE);
323
// LDPUMA_Registry(&Part2,"Второй проход",Parts);
324
LDPUMA_Registry(&Prep2, "Подготовительная часть (2)", Part2);
325
LDPUMA_Registry(&MainWork2, "Содержательная часть (2)", Part2);
326
LDPUMA_Registry(&PutContainer2, "Складка в контейнер (2)", Part2);
327
LDPUMA_Registry(&Epilog2, "Эпилог (2)", Part2);
328
LDPUMA_Registry(&Exit2, "Выход из функции (2)", Part2);
330
// LDPUMA_Registry(&Part3,"Третий проход",Parts);
331
LDPUMA_Registry(&GetContainer3, "Взятие из контейнера (3)", Part3);
332
LDPUMA_Registry(&MainWork3, "Содержательная часть (3)", Part3);
333
LDPUMA_Registry(&PutContainer3, "Складка в контейнер (3)", Part3);
334
LDPUMA_Registry(&Exit3, "Выход из функции (3)", Part3);
311
LDPUMA_RegVariable(hRLINE_Correct,"������������ ������ ��������",&MinHorLenForTrue,"unsigned");
312
LDPUMA_RegVariable(hRLINE_Correct,"������������ ������ ��������",&MinVerLenForTrue,"unsigned");
314
LDPUMA_Registry(&hDotKilledD,"���������� �������� �������� �����", hRLINE_CorrectControl);
315
LDPUMA_RegistryHelp(hDotKilledD,"���������� �������� �������� �����", FALSE);
317
LDPUMA_Registry(&hSkipDelSmallLines, "�� ������� ��������� ������� �����", hRLINE_CorrectDebug);
318
LDPUMA_RegistryHelp(hSkipDelSmallLines, "��������� � ���������� �������� (������ ������ 30) ���������� �� ����� �������", FALSE);
320
LDPUMA_Registry(&hRLINE_Pass2Output,"��������� II �������", hRLINE_Pass2);
321
LDPUMA_Registry(&hRLINE_Pass2DrawLines,"�������� ����� (II)", hRLINE_Pass2Output);
322
LDPUMA_Registry(&hRLINE_Pass2DrawFrags,"�������� ��������� ����� (II)", hRLINE_Pass2Output);
323
LDPUMA_Registry(&hLinesPass2, "�������� II ������� �� ������", hRLINE_Pass2);
324
LDPUMA_RegistryHelp(hLinesPass2, "��� ��������� - ���������� II ������", FALSE);
325
LDPUMA_Registry(&hLinesPass2Debug, "������� II ������� �� ������", hRLINE_Pass2);
326
LDPUMA_Registry(&hLinesPass2DebugSkipDouble, "���������� ��������� �������", hLinesPass2Debug);
327
LDPUMA_Registry(&hLinesPass2DebugSkipGlue, "���������� ������� �����", hLinesPass2Debug);
328
LDPUMA_Registry(&hLinesPass2DebugSkipFindLost, "���������� �������������� ����������", hLinesPass2Debug);
330
LDPUMA_Registry(&hWriteLineInFile2, "������ ����������� ������ ������� ������� �� ������", hLinesPass2);
331
LDPUMA_RegistryHelp(hWriteLineInFile2, "�������� ���������� ������� ������� � ���� lines2.res", FALSE);
333
LDPUMA_RegVariable(hRLINE_Pass2, "����������� �������� ����� �������", &hMinInterval, "unsigned");
334
LDPUMA_RegVariable(hRLINE_Pass2, "������ �������� ����� �������", &h1Interval, "unsigned");
335
LDPUMA_RegVariable(hRLINE_Pass2, "������ �������� ����� �������", &h2Interval, "unsigned");
336
LDPUMA_RegVariable(hRLINE_Pass2, "������������ �������� ����� �������", &hMaxInterval, "unsigned");
337
LDPUMA_RegVariable(hRLINE_Pass2, "����� ��������� �����", &hSmallLineLen, "unsigned");
338
LDPUMA_RegVariable(hRLINE_Pass2, "����� ������� �����", &hLongLineLen, "unsigned");
339
LDPUMA_RegVariable(hRLINE_Pass2, "������������ �������� ���� ������� (� ����� ����� �������)", &hMaxDegreeDiff, "unsigned");
340
LDPUMA_RegVariable(hRLINE_Pass2, "������������ ������� ����� (� ��������)", &hMaxShift, "unsigned");
341
LDPUMA_RegVariable(hRLINE_Pass2, "���������� ������", &hRastDelta, "unsigned");
343
LDPUMA_Registry(&hPrint1Cr, "������ �������� 1 ��������", hLinesPass2);
344
LDPUMA_RegistryHelp(hPrint1Cr, "������ � ������� ����������� �������� 1 �������� (� ������ ������)", FALSE);
345
LDPUMA_Registry(&hPrint2Cr, "������ �������� 2 ��������", hLinesPass2);
346
LDPUMA_RegistryHelp(hPrint2Cr, "������ � ������� ����������� �������� 2 �������� (� ������ ������)", FALSE);
347
LDPUMA_Registry(&hPrint3Cr, "������ �������� 3 ��������", hLinesPass2);
348
LDPUMA_RegistryHelp(hPrint3Cr, "������ � ������� ����������� �������� 3 �������� (� ������ ������)", FALSE);
349
LDPUMA_Registry(&hPrint4Cr, "������ �������� 4 ��������", hLinesPass2);
350
LDPUMA_RegistryHelp(hPrint4Cr, "������ � ������� ����������� �������� 4 �������� (� ������ ������)", FALSE);
351
LDPUMA_Registry(&hDrawCrRast, "�������� ����� ����� �������", hLinesPass2);
352
LDPUMA_RegistryHelp(hDrawCrRast, "�������� ����� ����� ������� ��� �������� ����������", FALSE);
353
LDPUMA_Registry(&hShowCPLines, "�������� ����� ����� ���������������", hLinesPass2);
354
LDPUMA_RegistryHelp(hShowCPLines, "�������� ����� ����� ��������������� �� ������ � �������� ����", FALSE);
355
LDPUMA_Registry(&hShowCP, "�������� ����� �����������", hLinesPass2);
356
LDPUMA_RegistryHelp(hShowCP, "�������� ����� ����������� ����� � �������� ����", FALSE);
357
LDPUMA_Registry(&hShowCheckedRects, "�������� ����������� ���������", hLinesPass2);
358
LDPUMA_RegistryHelp(hShowCheckedRects, "�������� ����������� �������������� ����������-���������� �� �������������� � �������� ����", FALSE);
359
LDPUMA_Registry(&hPrintCheckedRects, "������ �������� ����������", hLinesPass2);
360
LDPUMA_RegistryHelp(hPrintCheckedRects, "�������� � ������� ���������� �������� ���������� ��������������� ����������-���������� �� ��������������", FALSE);
362
LDPUMA_Registry(&hDebugDrowTableZone,"�������� ���� ������ ����� II �������",hRLINE_Pass3Input);
363
LDPUMA_Registry(&hDebugDrowFriendLines,"�������� �����, �������� � ���� ������",hRLINE_Pass3_Control);
364
LDPUMA_Registry(&hDebugDrowGroupOfExtensibleLines,"�������� ������ �����(������� ����� ������� ����� �����) � �������� ����",hRLINE_Pass3_Control);
365
LDPUMA_Registry(&hDebugDrawLosedVerticalLines,"�������� ������ ������������ �����(������� � ������ ������ LNS-�� ����� ���������������) � �������� ����",hRLINE_Pass3_Control);
366
LDPUMA_Registry(&hDebugPrintCrossCheck,"������ �������� ����� ����������� ���. �����", hRLINE_Pass3_Control);
368
LDPUMA_Registry(&hDebugShortLinesPrint, "����� ����������� �������� �������� ����� �� �������", hRLINE_CorrectControl);
369
// LDPUMA_Registry(&hDebugShortLinesDrawRect, "�������� �������������� �������� �����", hRLINE_CorrectControl);
370
// LDPUMA_RegistryHelp(hDebugShortLinesDrawRect, "�������� �������������� ������� ����� ��� ���������� �� ���������", FALSE);
337
LDPUMA_RegVariable(hRLINE_Correct, "Подтверждать ГорЛин НеКороче",
338
&MinHorLenForTrue, "unsigned");
339
LDPUMA_RegVariable(hRLINE_Correct, "Подтверждать ВерЛин НеКороче",
340
&MinVerLenForTrue, "unsigned");
342
LDPUMA_Registry(&hDotKilledD, "Прорисовка удалённых точечных линий",
343
hRLINE_CorrectControl);
344
LDPUMA_RegistryHelp(hDotKilledD, "Прорисовка удалённых точечных линий",
347
LDPUMA_Registry(&hSkipDelSmallLines, "НЕ удалять маленькие остатки линий",
348
hRLINE_CorrectDebug);
351
"Оставлять в контейнере короткие (длиной меньше 30) отделенные от линий остатки",
354
LDPUMA_Registry(&hRLINE_Pass2Output, "Результат II прохода", hRLINE_Pass2);
355
LDPUMA_Registry(&hRLINE_Pass2DrawLines, "Рисовать линии (II)",
357
LDPUMA_Registry(&hRLINE_Pass2DrawFrags, "Рисовать фрагменты линий (II)",
359
LDPUMA_Registry(&hLinesPass2, "Контроль II прохода по линиям", hRLINE_Pass2);
360
LDPUMA_RegistryHelp(hLinesPass2, "При выделении - пропустить II проход",
362
LDPUMA_Registry(&hLinesPass2Debug, "Отладка II прохода по линиям",
364
LDPUMA_Registry(&hLinesPass2DebugSkipDouble,
365
"Пропустить коррекцию двойных", hLinesPass2Debug);
366
LDPUMA_Registry(&hLinesPass2DebugSkipGlue, "Пропустить склейку линий",
368
LDPUMA_Registry(&hLinesPass2DebugSkipFindLost,
369
"Пропустить восстановление потерянных", hLinesPass2Debug);
371
LDPUMA_Registry(&hWriteLineInFile2,
372
"Отпись результатов работы второго прохода по линиям", hLinesPass2);
373
LDPUMA_RegistryHelp(hWriteLineInFile2,
374
"Записать результаты второго прохода в файл lines2.res", FALSE);
376
LDPUMA_RegVariable(hRLINE_Pass2, "Минимальный интервал между линиями",
377
&hMinInterval, "unsigned");
378
LDPUMA_RegVariable(hRLINE_Pass2, "Первый интервал между линиями",
379
&h1Interval, "unsigned");
380
LDPUMA_RegVariable(hRLINE_Pass2, "Второй интервал между линиями",
381
&h2Interval, "unsigned");
382
LDPUMA_RegVariable(hRLINE_Pass2, "Максимальный интервал между линиями",
383
&hMaxInterval, "unsigned");
384
LDPUMA_RegVariable(hRLINE_Pass2, "Длина маленькой линии", &hSmallLineLen,
386
LDPUMA_RegVariable(hRLINE_Pass2, "Длина большой линии", &hLongLineLen,
388
LDPUMA_RegVariable(hRLINE_Pass2,
389
"Максимальное различие угла наклона (в сотых долях радиана)",
390
&hMaxDegreeDiff, "unsigned");
391
LDPUMA_RegVariable(hRLINE_Pass2, "Максимальный боковой сдвиг (в квадрате)",
392
&hMaxShift, "unsigned");
393
LDPUMA_RegVariable(hRLINE_Pass2, "Размывание растра", &hRastDelta,
396
LDPUMA_Registry(&hPrint1Cr, "Печать проверки 1 критерия", hLinesPass2);
399
"Печать в консоль результатов проверки 1 критерия (в случае успеха)",
401
LDPUMA_Registry(&hPrint2Cr, "Печать проверки 2 критерия", hLinesPass2);
404
"Печать в консоль результатов проверки 2 критерия (в случае успеха)",
406
LDPUMA_Registry(&hPrint3Cr, "Печать проверки 3 критерия", hLinesPass2);
409
"Печать в консоль результатов проверки 3 критерия (в случае успеха)",
411
LDPUMA_Registry(&hPrint4Cr, "Печать проверки 4 критерия", hLinesPass2);
414
"Печать в консоль результатов проверки 4 критерия (в случае успеха)",
416
LDPUMA_Registry(&hDrawCrRast, "Рисовать растр между линиями", hLinesPass2);
417
LDPUMA_RegistryHelp(hDrawCrRast,
418
"Рисовать растр между линиями при проверке почернения", FALSE);
419
LDPUMA_Registry(&hShowCPLines, "Показать линии перед восстановлением",
421
LDPUMA_RegistryHelp(hShowCPLines,
422
"Показать линии перед восстановлением по штырям в основном окне",
424
LDPUMA_Registry(&hShowCP, "Показать точки пересечения", hLinesPass2);
425
LDPUMA_RegistryHelp(hShowCP,
426
"Показать точки пересечения линий в основном окне", FALSE);
427
LDPUMA_Registry(&hShowCheckedRects, "Показать проверяемые интервалы",
431
"Показать проверяемые прямоугольники интервалов-кандидатов на восстановление в основном окне",
433
LDPUMA_Registry(&hPrintCheckedRects, "Печать проверки интервалов",
437
"Печатать в консоль результаты проверки почернения прямоугольников интервалов-кандидатов на восстановление",
440
LDPUMA_Registry(&hDebugDrowTableZone,
441
"Рисуются зоны таблиц после II прохода", hRLINE_Pass3Input);
442
LDPUMA_Registry(&hDebugDrowFriendLines,
443
"Рисуются линии, попавшие в зоны таблиц", hRLINE_Pass3_Control);
445
&hDebugDrowGroupOfExtensibleLines,
446
"Рисуются группы линий(которые могут создать новую линию) в основном окне",
447
hRLINE_Pass3_Control);
449
&hDebugDrawLosedVerticalLines,
450
"Рисуются группы вертикальных линий(которые в случае потери LNS-ом будем восстанавливать) в основном окне",
451
hRLINE_Pass3_Control);
452
LDPUMA_Registry(&hDebugPrintCrossCheck,
453
"Печать проверки точек пересечения кор. линий",
454
hRLINE_Pass3_Control);
456
LDPUMA_Registry(&hDebugShortLinesPrint,
457
"Вывод результатов проверки коротких линий на консоль",
458
hRLINE_CorrectControl);
459
// LDPUMA_Registry(&hDebugShortLinesDrawRect, "Рисовать прямоугольники коротких линий", hRLINE_CorrectControl);
460
// LDPUMA_RegistryHelp(hDebugShortLinesDrawRect, "Рисовать прямоугольники растров линий или содержащих их компонент", FALSE);
373
/* ofstream outfile("lines.res", ios::out|ios::binary);
374
if (outfile) outfile.close();
463
/* ofstream outfile("lines.res", ios::out|ios::binary);
464
if (outfile) outfile.close();
377
467
if (remove("lines.res") == -1) err_no = errno;
378
468
if (remove("lines.txt") == -1) err_no = errno;
386
476
//////////////////////////////////////////////////////////////////////////////////
388
Bool32 RLINE_SearchLines( void* lpInPage,void* phCLINE)
391
CLINE_handle* PHCLINE=(CLINE_handle*)phCLINE;
392
CLINE_DeleteContainer(*PHCLINE);
393
LinesTotalInfo lti; // ��������� �������� �����
394
PAGEINFO PInfo; // �������� ��������
395
char* pImage; // ��������� �� �����������
398
Int32 result_h_count,
401
// �������� PAGEINFO ������� ��������
402
if (!CPAGE_GetPageData( lpInPage,PT_PAGEINFO,(void*)&PInfo,sizeof(PInfo)))
404
LDPUMA_Console( " Error in GetPageData " );
478
Bool32 RLINE_SearchLines(void* lpInPage, void* phCLINE) {
480
CLINE_handle* PHCLINE = (CLINE_handle*) phCLINE;
481
CLINE_DeleteContainer(*PHCLINE);
482
LinesTotalInfo lti; // Структура хранения линий
483
PAGEINFO PInfo; // Описание страницы
484
char* pImage; // Указатель на изображение
487
int32_t result_h_count, result_v_count;
489
// Получаем PAGEINFO текущей страницы
490
if (!CPAGE_GetPageData(lpInPage, PT_PAGEINFO, (void*) &PInfo, sizeof(PInfo))) {
491
LDPUMA_Console(" Error in GetPageData ");
405
492
rc32 = CPAGE_GetReturnCode();
406
SetReturnCode_rline( rc32 );
493
SetReturnCode_rline(rc32);
410
// �������� � pImage �� PInfo ��������� �� �����������, ��������� �� ���������
411
pImage = (char*)&PInfo.szImageName;
413
min_h_len = (Word16)(PInfo.DPIX*40/300);
414
min_v_len = (Word16)(PInfo.DPIY*40/300);
416
if (!CIMAGE_GetCallbackImage( (PWord8)pImage, &cbk))
418
LDPUMA_Console( " Error in GetCallbackImage " );
497
// Копируем в pImage из PInfo указатель на изображение, связанное со страницей
498
pImage = (char*) &PInfo.szImageName;
500
min_h_len = (uint16_t) (PInfo.DPIX * 40 / 300);
501
min_v_len = (uint16_t) (PInfo.DPIY * 40 / 300);
503
if (!CIMAGE_GetCallbackImage((puchar) pImage, &cbk)) {
504
LDPUMA_Console(" Error in GetCallbackImage ");
419
505
rc32 = CIMAGE_GetReturnCode();
420
SetReturnCode_rline( rc32 );
506
SetReturnCode_rline(rc32);
424
imxs.f_op = DibOpen; // �� �� ����� �� �� ������ �������� ������
425
imxs.f_re = DibRead; // � ���� �� ���� � CIMAGE � LNS32 ���������
426
imxs.f_cl = DibClose; // imxs->... cbk->... ����� �������������� �����.
429
// �������������� ��������
510
imxs.f_op = DibOpen; // Мы не можем из за разных названий одного
511
imxs.f_re = DibRead; // и того же типа в CIMAGE и LNS32 присвоить
512
imxs.f_cl = DibClose; // imxs->... cbk->... нужно преобразование типов.
515
// Подготавливаем страницу
430
516
LnsPageStart(&imxs);
432
// ��������� ���������� ������ LNS32.dll
518
// Установка параметров работы LNS32.dll
436
if ( !LDPUMA_Skip(RLINE_NoFillgap) )
522
if (!LDPUMA_Skip(RLINE_NoFillgap)) {
438
523
gbNOFILLGAP3 = TRUE;
442
525
gbNOFILLGAP3 = FALSE;
444
527
ls.nOptions |= gbNOFILLGAP3 ? 0 : LSS_NOFILLGAP3_FILTER;
446
if ( !LDPUMA_Skip(RLINE_NoHorBorder) )
529
if (!LDPUMA_Skip(RLINE_NoHorBorder)) {
448
530
gbNOHBORDER = TRUE;
452
532
gbNOHBORDER = FALSE;
454
534
ls.nOptions |= gbNOHBORDER ? 0 : LSS_NOHBORDER_FILTER;
456
if ( !LDPUMA_Skip(RLINE_NoVerBorder) )
536
if (!LDPUMA_Skip(RLINE_NoVerBorder)) {
458
537
gbNOVBORDER = TRUE;
462
539
gbNOVBORDER = FALSE;
464
541
ls.nOptions |= gbNOVBORDER ? 0 : LSS_NOVBORDER_FILTER;
470
if (!LnsExtractLines( min_h_len, min_v_len, &result_h_count, &result_v_count ))
546
if (!LnsExtractLines(min_h_len, min_v_len, &result_h_count, &result_v_count)) {
472
547
//rc16 = LnsGetError ();
473
SetReturnCode_rline( rc16 );
474
CLINE_DeleteContainer(*PHCLINE);
475
*PHCLINE = CLINE_CreateContainer(TRUE);
481
lti.Hor.Lns = (LineInfo*)malloc(result_h_count * sizeof(LineInfo));
482
if (lti.Hor.Lns == NULL)
484
SetReturnCode_rline( rc16 );
488
else lti.Hor.Lns = NULL;
489
lti.Hor.Cnt = result_h_count;
493
lti.Ver.Lns = (LineInfo*)malloc(result_v_count * sizeof(LineInfo));
494
if (lti.Ver.Lns == NULL)
496
SetReturnCode_rline( rc16 );
500
else lti.Ver.Lns = NULL;
501
lti.Ver.Cnt = result_v_count;
503
if (!LnsUpload( <i, min_h_len, min_v_len ))
505
SetReturnCode_rline( rc16 );
509
if(!LDPUMA_Skip(RLINE_ShowLines))
511
Handle draw_window = LDPUMA_GetWindowHandle (NAME_IMAGE_ORTOMOVE);
512
if (!draw_window) draw_window = LDPUMA_GetWindowHandle (PUMA_IMAGE_TURN);
513
if (!draw_window) draw_window = LDPUMA_CreateWindow(NULL, NULL);
548
SetReturnCode_rline(rc16);
549
CLINE_DeleteContainer(*PHCLINE);
550
*PHCLINE = CLINE_CreateContainer(TRUE);
554
if (result_h_count) {
555
lti.Hor.Lns = (LineInfo*) malloc(result_h_count * sizeof(LineInfo));
556
if (lti.Hor.Lns == NULL) {
557
SetReturnCode_rline(rc16);
562
lti.Hor.Cnt = result_h_count;
564
if (result_v_count) {
565
lti.Ver.Lns = (LineInfo*) malloc(result_v_count * sizeof(LineInfo));
566
if (lti.Ver.Lns == NULL) {
567
SetReturnCode_rline(rc16);
572
lti.Ver.Cnt = result_v_count;
574
if (!LnsUpload(<i, min_h_len, min_v_len)) {
575
SetReturnCode_rline(rc16);
579
if (!LDPUMA_Skip(RLINE_ShowLines)) {
580
Handle draw_window = LDPUMA_GetWindowHandle(NAME_IMAGE_ORTOMOVE);
582
draw_window = LDPUMA_GetWindowHandle(PUMA_IMAGE_TURN);
584
draw_window = LDPUMA_CreateWindow(NULL, NULL);
586
uint32_t x = 255 << 8;
518
for(i=0;i<lti.Hor.Cnt;i++)
520
temp = (-100)*lti.Hor.Lns[i].Thickness;
521
_ASSERT(lti.Hor.Lns[i].Thickness>0);
522
LDPUMA_DrawLine(draw_window, <i.Hor.Lns[i].A, <i.Hor.Lns[i].B, 0, x, (WORD)temp, 512);
524
for(i=0;i<lti.Ver.Cnt;i++)
526
temp = (-100)*lti.Ver.Lns[i].Thickness;
527
_ASSERT(lti.Ver.Lns[i].Thickness>0);
528
LDPUMA_DrawLine(draw_window, <i.Ver.Lns[i].A, <i.Ver.Lns[i].B, 0, x, (WORD)temp, 512);
530
if (lti.Hor.Cnt || lti.Ver.Cnt)
532
LDPUMA_Console("������� ����� �������...\n");
533
LDPUMA_WaitUserInput(RLINE_ShowLines, draw_window );
534
LDPUMA_DeleteLines(draw_window, 512);
589
for (i = 0; i < lti.Hor.Cnt; i++) {
590
temp = (-100) * lti.Hor.Lns[i].Thickness;
591
_ASSERT(lti.Hor.Lns[i].Thickness > 0);
592
LDPUMA_DrawLine(draw_window, <i.Hor.Lns[i].A, <i.Hor.Lns[i].B,
593
0, x, (uint16_t) temp, 512);
595
for (i = 0; i < lti.Ver.Cnt; i++) {
596
temp = (-100) * lti.Ver.Lns[i].Thickness;
597
_ASSERT(lti.Ver.Lns[i].Thickness > 0);
598
LDPUMA_DrawLine(draw_window, <i.Ver.Lns[i].A, <i.Ver.Lns[i].B,
599
0, x, (uint16_t) temp, 512);
601
if (lti.Hor.Cnt || lti.Ver.Cnt) {
602
LDPUMA_Console("Нажмите любую клавишу...\n");
603
LDPUMA_WaitUserInput(RLINE_ShowLines, draw_window);
604
LDPUMA_DeleteLines(draw_window, 512);
538
///////////////////////////////////////////////////////////////////////////////////////////////////
608
///////////////////////////////////////////////////////////////////////////////////////////////////
541
CLINE_handle hCLINE=CLINE_CreateContainer(TRUE);
611
CLINE_handle hCLINE = CLINE_CreateContainer(TRUE);
544
614
CLINE_handle hline;
546
int size_line=sizeof(DLine);
616
int size_line = sizeof(DLine);
548
for(i=0;i<lti.Hor.Cnt;i++)
550
hline=CLINE_AddNewLine(hCLINE);
553
CLINE_DeleteContainer(hCLINE);
556
linfo=&(lti.Hor.Lns[i]);
557
CleanLineData(&data,size_line);
558
data.ProcessingType=HorizantalLine;
559
data.Line.Beg_X=linfo->A.x;
560
data.Line.Beg_Y=linfo->A.y;
561
data.Line.End_X=linfo->B.x;
562
data.Line.End_Y=linfo->B.y;
563
data.Line.Wid10=linfo->Thickness*10;
564
data.Dens=(linfo->Quality*100)/255;
565
data.Flags=linfo->Flags;
566
data.n_event=linfo->SegCnt;
569
if(!CLINE_SetLineData(hline,(CPDLine)(&data)))
571
CLINE_DeleteContainer(hCLINE);
576
for(i=0;i<lti.Ver.Cnt;i++)
578
hline=CLINE_AddNewLine(hCLINE);
581
CLINE_DeleteContainer(hCLINE);
584
linfo=&(lti.Ver.Lns[i]);
585
CleanLineData(&data,size_line);
587
data.Line.Beg_X=linfo->A.x;
588
data.Line.Beg_Y=linfo->A.y;
589
data.Line.End_X=linfo->B.x;
590
data.Line.End_Y=linfo->B.y;
591
data.Line.Wid10=linfo->Thickness*10;
592
data.Dens=(linfo->Quality*100)/255;
593
data.n_event=linfo->SegCnt;
594
data.Flags=linfo->Flags;
596
data.ProcessingType=VerticalLine;
598
if(!CLINE_SetLineData(hline,(CPDLine)(&data)))
600
CLINE_DeleteContainer(hCLINE);
606
if (!LDPUMA_Skip(hRLINE_CorrectDebugFrag))
618
for (i = 0; i < lti.Hor.Cnt; i++) {
619
hline = CLINE_AddNewLine(hCLINE);
621
CLINE_DeleteContainer(hCLINE);
624
linfo = &(lti.Hor.Lns[i]);
625
CleanLineData(&data, size_line);
626
data.ProcessingType = HorizantalLine;
627
data.Line.Beg_X = linfo->A.x;
628
data.Line.Beg_Y = linfo->A.y;
629
data.Line.End_X = linfo->B.x;
630
data.Line.End_Y = linfo->B.y;
631
data.Line.Wid10 = linfo->Thickness * 10;
632
data.Dens = (linfo->Quality * 100) / 255;
633
data.Flags = linfo->Flags;
634
data.n_event = linfo->SegCnt;
637
if (!CLINE_SetLineData(hline, (CPDLine)(&data))) {
638
CLINE_DeleteContainer(hCLINE);
643
for (i = 0; i < lti.Ver.Cnt; i++) {
644
hline = CLINE_AddNewLine(hCLINE);
646
CLINE_DeleteContainer(hCLINE);
649
linfo = &(lti.Ver.Lns[i]);
650
CleanLineData(&data, size_line);
652
data.Line.Beg_X = linfo->A.x;
653
data.Line.Beg_Y = linfo->A.y;
654
data.Line.End_X = linfo->B.x;
655
data.Line.End_Y = linfo->B.y;
656
data.Line.Wid10 = linfo->Thickness * 10;
657
data.Dens = (linfo->Quality * 100) / 255;
658
data.n_event = linfo->SegCnt;
659
data.Flags = linfo->Flags;
661
data.ProcessingType = VerticalLine;
663
if (!CLINE_SetLineData(hline, (CPDLine)(&data))) {
664
CLINE_DeleteContainer(hCLINE);
670
if (!LDPUMA_Skip(hRLINE_CorrectDebugFrag)) {
608
671
ExtractAllEvents(hCLINE, <i);
610
if (!LDPUMA_Skip(hRLINE_Search_Output_ShowFrags))
673
if (!LDPUMA_Skip(hRLINE_Search_Output_ShowFrags))
611
674
DrawFragsForAllLines(hCLINE, hRLINE_Search_Output_ShowFrags);
614
if(lti.Hor.Lns) free(lti.Hor.Lns);
615
if(lti.Ver.Lns) free(lti.Ver.Lns);
617
// ��������� ������ �� ���������
682
// Завершаем работу со страницей
621
if ( !LDPUMA_Skip(RLINE_Search) )
623
LDPUMA_Console("��������� ����� ����������� SerachLines");
624
LDPUMA_WaitUserInput(RLINE_Search,NULL);
685
if (!LDPUMA_Skip(RLINE_Search)) {
686
LDPUMA_Console("Остановка перед завершением SerachLines");
687
LDPUMA_WaitUserInput(RLINE_Search, NULL);
633
Bool32 RLINE_DeleteLines(void* lpInPage, const char* lpOutDIB)
636
PAGEINFO PInfo; // �������� ��������
637
char* pImage; // ��������� �� �����������
642
Int32 result_h_count,
693
Bool32 RLINE_DeleteLines(void* lpInPage, const char* lpOutDIB) {
695
PAGEINFO PInfo; // Описание страницы
696
char* pImage; // Указатель на изображение
700
int32_t result_h_count, result_v_count;
644
701
Bool DelAllLines;
645
702
DelAllLines = FALSE;
646
CLINE_handle hCLINE=CLINE_GetMainContainer();
703
CLINE_handle hCLINE = CLINE_GetMainContainer();
648
// �������� PAGEINFO ������� ��������
649
if (!CPAGE_GetPageData( lpInPage,PT_PAGEINFO,(void*)&PInfo,sizeof(PInfo)))
651
LDPUMA_Console( " Error in GetPageData " );
705
// Получаем PAGEINFO текущей страницы
706
if (!CPAGE_GetPageData(lpInPage, PT_PAGEINFO, (void*) &PInfo, sizeof(PInfo))) {
707
LDPUMA_Console(" Error in GetPageData ");
652
708
rc32 = CPAGE_GetReturnCode();
653
SetReturnCode_rline( rc32 );
709
SetReturnCode_rline(rc32);
657
// �������� � pImage �� PInfo ��������� �� �����������,
658
// ��������� �� ���������
659
pImage = (char*)&PInfo.szImageName;
661
min_h_len = (Word16)(PInfo.DPIX*40/300);
662
min_v_len = (Word16)(PInfo.DPIY*40/300);
664
if (!CIMAGE_GetCallbackImage((PWord8) pImage, &cbk))
666
LDPUMA_Console( " Error in GetCallbackImage " );
713
// Копируем в pImage из PInfo указатель на изображение,
714
// связанное со страницей
715
pImage = (char*) &PInfo.szImageName;
717
min_h_len = (uint16_t) (PInfo.DPIX * 40 / 300);
718
min_v_len = (uint16_t) (PInfo.DPIY * 40 / 300);
720
if (!CIMAGE_GetCallbackImage((puchar) pImage, &cbk)) {
721
LDPUMA_Console(" Error in GetCallbackImage ");
667
722
rc32 = CIMAGE_GetReturnCode();
668
SetReturnCode_rline( rc32 );
723
SetReturnCode_rline(rc32);
672
imxs.f_op = DibOpen; // �� �� ����� �� �� ������ �������� ������
673
imxs.f_re = DibRead; // � ���� �� ���� � CIMAGE � LNS32 ���������
674
imxs.f_cl = DibClose; // imxs->... cbk->... ����� �������������� �����.
727
imxs.f_op = DibOpen; // Мы не можем из за разных названий одного
728
imxs.f_re = DibRead; // и того же типа в CIMAGE и LNS32 присвоить
729
imxs.f_cl = DibClose; // imxs->... cbk->... нужно преобразование типов.
676
// �������������� ��������
731
// Подготавливаем страницу
677
732
LnsPageStart(&imxs);
679
// ��������� ���������� ������ LNS32.dll
734
// Установка параметров работы LNS32.dll
683
if ( !LDPUMA_Skip(RLINE_NoFillgap) )
738
if (!LDPUMA_Skip(RLINE_NoFillgap)) {
685
739
gbNOFILLGAP3 = TRUE;
689
741
gbNOFILLGAP3 = FALSE;
691
743
ls.nOptions |= gbNOFILLGAP3 ? 0 : LSS_NOFILLGAP3_FILTER;
693
if ( !LDPUMA_Skip(RLINE_NoHorBorder) )
745
if (!LDPUMA_Skip(RLINE_NoHorBorder)) {
695
746
gbNOHBORDER = TRUE;
699
748
gbNOHBORDER = FALSE;
701
750
ls.nOptions |= gbNOHBORDER ? 0 : LSS_NOHBORDER_FILTER;
703
if ( !LDPUMA_Skip(RLINE_NoVerBorder) )
752
if (!LDPUMA_Skip(RLINE_NoVerBorder)) {
705
753
gbNOVBORDER = TRUE;
709
755
gbNOVBORDER = FALSE;
711
757
ls.nOptions |= gbNOVBORDER ? 0 : LSS_NOVBORDER_FILTER;
716
if (!LnsExtractLines( min_h_len, min_v_len, &result_h_count, &result_v_count ))
718
SetReturnCode_rline( rc16 );
762
if (!LnsExtractLines(min_h_len, min_v_len, &result_h_count, &result_v_count)) {
763
SetReturnCode_rline(rc16);
724
lti2.Hor.Lns = (LineInfo*)malloc(result_h_count * sizeof(LineInfo));
725
if (lti2.Hor.Lns == NULL)
727
SetReturnCode_rline( rc16 );
731
else lti2.Hor.Lns = NULL;
732
lti2.Hor.Cnt = result_h_count;
736
lti2.Ver.Lns = (LineInfo*)malloc(result_v_count * sizeof(LineInfo));
737
if (lti2.Ver.Lns == NULL)
739
SetReturnCode_rline( rc16 );
743
else lti2.Ver.Lns = NULL;
744
lti2.Ver.Cnt = result_v_count;
746
if (!LnsUpload( <i2, min_h_len, min_v_len ))
748
SetReturnCode_rline( rc16 );
767
if (result_h_count) {
768
lti2.Hor.Lns = (LineInfo*) malloc(result_h_count * sizeof(LineInfo));
769
if (lti2.Hor.Lns == NULL) {
770
SetReturnCode_rline(rc16);
775
lti2.Hor.Cnt = result_h_count;
777
if (result_v_count) {
778
lti2.Ver.Lns = (LineInfo*) malloc(result_v_count * sizeof(LineInfo));
779
if (lti2.Ver.Lns == NULL) {
780
SetReturnCode_rline(rc16);
785
lti2.Ver.Cnt = result_v_count;
787
if (!LnsUpload(<i2, min_h_len, min_v_len)) {
788
SetReturnCode_rline(rc16);
752
792
CLINE_handle hline;
755
for(i=lti2.Hor.Cnt-1;i>=0;i--)
756
lti2.Hor.Lns[i].Flags=LI_SWEEP;
757
for(i=lti2.Ver.Cnt-1;i>=0;i--)
758
lti2.Ver.Lns[i].Flags=LI_SWEEP;
762
for(hline=CLINE_GetFirstLine(hCLINE);hline;hline=CLINE_GetNextLine(hline))
764
CPDLine cpdata=CLINE_GetLineData(hline);
767
rc32 = CLINE_GetReturnCode();
768
SetReturnCode_rline( rc32 );
771
if(cpdata->Dir==LD_Horiz)
773
for (i=0; i<lti2.Hor.Cnt; i++)
775
if( (lti2.Hor.Lns[i].A.x == cpdata->Line.Beg_X) && (lti2.Hor.Lns[i].B.x == cpdata->Line.End_X) &&
776
(lti2.Hor.Lns[i].A.y == cpdata->Line.Beg_Y) && (lti2.Hor.Lns[i].B.y == cpdata->Line.End_Y) )
778
if (cpdata->Flags & LI_NOTWHOLE)
780
lti2.Hor.Lns[i].Anew = cpdata->lns_data.Anew;
781
lti2.Hor.Lns[i].Bnew = cpdata->lns_data.Bnew;
783
lti2.Hor.Lns[i].Flags = cpdata->Flags;
784
if (cpdata->Flags & LI_IsTrue)
785
lti2.Hor.Lns[i].Flags |= LI_SWEEP;
792
for (i=0; i<lti2.Ver.Cnt; i++)
794
if( (lti2.Ver.Lns[i].A.x == cpdata->Line.Beg_X) && (lti2.Ver.Lns[i].B.x == cpdata->Line.End_X) &&
795
(lti2.Ver.Lns[i].A.y == cpdata->Line.Beg_Y) && (lti2.Ver.Lns[i].B.y == cpdata->Line.End_Y) )
797
if (cpdata->Flags & LI_NOTWHOLE)
799
lti2.Ver.Lns[i].Anew = cpdata->lns_data.Anew;
800
lti2.Ver.Lns[i].Bnew = cpdata->lns_data.Bnew;
802
lti2.Ver.Lns[i].Flags = cpdata->Flags;
803
if (cpdata->Flags & LI_IsTrue)
804
lti2.Ver.Lns[i].Flags |= LI_SWEEP;
811
/////////////////////////////////////////////////////////////////////////////////////////////
812
swp_imxs = LnsGetSweepedImage( <i2 );
794
for (i = lti2.Hor.Cnt - 1; i >= 0; i--)
795
lti2.Hor.Lns[i].Flags = LI_SWEEP;
796
for (i = lti2.Ver.Cnt - 1; i >= 0; i--)
797
lti2.Ver.Lns[i].Flags = LI_SWEEP;
799
for (hline = CLINE_GetFirstLine(hCLINE); hline; hline
800
= CLINE_GetNextLine(hline)) {
801
CPDLine cpdata = CLINE_GetLineData(hline);
803
rc32 = CLINE_GetReturnCode();
804
SetReturnCode_rline(rc32);
807
if (cpdata->Dir == LD_Horiz) {
808
for (i = 0; i < lti2.Hor.Cnt; i++) {
809
if ((lti2.Hor.Lns[i].A.x == cpdata->Line.Beg_X)
810
&& (lti2.Hor.Lns[i].B.x == cpdata->Line.End_X)
811
&& (lti2.Hor.Lns[i].A.y == cpdata->Line.Beg_Y)
812
&& (lti2.Hor.Lns[i].B.y == cpdata->Line.End_Y)) {
813
if (cpdata->Flags & LI_NOTWHOLE) {
814
lti2.Hor.Lns[i].Anew = cpdata->lns_data.Anew;
815
lti2.Hor.Lns[i].Bnew = cpdata->lns_data.Bnew;
817
lti2.Hor.Lns[i].Flags = cpdata->Flags;
818
if (cpdata->Flags & LI_IsTrue)
819
lti2.Hor.Lns[i].Flags |= LI_SWEEP;
824
for (i = 0; i < lti2.Ver.Cnt; i++) {
825
if ((lti2.Ver.Lns[i].A.x == cpdata->Line.Beg_X)
826
&& (lti2.Ver.Lns[i].B.x == cpdata->Line.End_X)
827
&& (lti2.Ver.Lns[i].A.y == cpdata->Line.Beg_Y)
828
&& (lti2.Ver.Lns[i].B.y == cpdata->Line.End_Y)) {
829
if (cpdata->Flags & LI_NOTWHOLE) {
830
lti2.Ver.Lns[i].Anew = cpdata->lns_data.Anew;
831
lti2.Ver.Lns[i].Bnew = cpdata->lns_data.Bnew;
833
lti2.Ver.Lns[i].Flags = cpdata->Flags;
834
if (cpdata->Flags & LI_IsTrue)
835
lti2.Ver.Lns[i].Flags |= LI_SWEEP;
842
/////////////////////////////////////////////////////////////////////////////////////////////
843
swp_imxs = LnsGetSweepedImage(<i2);
815
845
CIMAGEIMAGECALLBACK cbk1;
816
cbk1.CIMAGE_ImageOpen = SampleImageOpen;
817
cbk1.CIMAGE_ImageRead = SampleImageRead;
846
cbk1.CIMAGE_ImageOpen = SampleImageOpen;
847
cbk1.CIMAGE_ImageRead = SampleImageRead;
818
848
cbk1.CIMAGE_ImageClose = SampleImageClose;
821
if (!CIMAGE_GetCallbackImage( (PWord8)pImage, &cbk))
823
rc32 = CIMAGE_GetReturnCode();
824
SetReturnCode_rline( rc32 );
828
if (!CIMAGE_WriteCallbackImage( (PWord8)lpOutDIB, cbk1 ))
830
rc32 = CIMAGE_GetReturnCode();
831
SetReturnCode_rline( rc32 );
850
if (!CIMAGE_GetCallbackImage((puchar) pImage, &cbk)) {
851
rc32 = CIMAGE_GetReturnCode();
852
SetReturnCode_rline(rc32);
856
if (!CIMAGE_WriteCallbackImage((puchar) lpOutDIB, cbk1)) {
857
rc32 = CIMAGE_GetReturnCode();
858
SetReturnCode_rline(rc32);
838
if(!LDPUMA_Skip(RLINE_ShowWithoutLines))
840
BITMAPINFOHEADER * lp = NULL ;
841
CIMAGE_ReadDIB((PWord8)PUMA_IMAGE_DELLINE,(Handle*)&lp,TRUE);
842
Handle hwnd = LDPUMA_CreateWindow("����� ������ �����",lp);
843
LDPUMA_Console("������� ����� �������...");
844
LDPUMA_WaitUserInput(RLINE_ShowWithoutLines, hwnd );
864
if (!LDPUMA_Skip(RLINE_ShowWithoutLines)) {
865
BITMAPINFOHEADER * lp = NULL;
866
CIMAGE_ReadDIB((puchar) PUMA_IMAGE_DELLINE, (Handle*) &lp, TRUE);
867
Handle hwnd = LDPUMA_CreateWindow("После снятия линий", lp);
868
LDPUMA_Console("Нажмите любую клавишу...");
869
LDPUMA_WaitUserInput(RLINE_ShowWithoutLines, hwnd);
847
if(lti2.Hor.Lns) free(lti2.Hor.Lns);
848
if(lti2.Ver.Lns) free(lti2.Ver.Lns);
853
void CleanLineData(void* pdata,int size)
855
Word8* mas=(Word8*)pdata;
856
for(int i=size-1;i>=0;i--)
880
void CleanLineData(void* pdata, int size) {
881
uchar* mas = (uchar*) pdata;
882
for (int i = size - 1; i >= 0; i--) {