void SVLProcessor::readSVL(LinesTotalInfo * info) { int count = 0; CLINE_handle hline = CLINE_GetFirstLine(image_->hCLINE); info->Hor.Cnt = 0; info->Ver.Cnt = 0; while (hline) { CPDLine cpdata = CLINE_GetLineData(hline); if(!cpdata) { hline = CLINE_GetNextLine(hline); continue; } if(count >= MAX_LINES) { Debug() << BOOST_CURRENT_FUNCTION << " Warning: too many SVL lines!\n"; break; } count++; readLineData(cpdata, info); hline = CLINE_GetNextLine(hline); } }
/*----------------------------------------------------------------------------*/ Bool MyReSetLines(void* vLines,int count,CLINE_handle hCLINE,char *pStr) { uint32_t nTeor; nTeor=sizeof(DLine); DLine* pbeg=(DLine*)vLines; DLine* pend=&(pbeg[count]); DLine* p; CPDLine cpdata; int Beg_X; int End_X; int Beg_Y; int End_Y; for(CLINE_handle hline=CLINE_GetFirstLine(hCLINE);hline&&count;hline=CLINE_GetNextLine(hline)) { cpdata=CLINE_GetLineData(hline); if(!cpdata) { sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CLINE][SetLineData]"); return FALSE; } Beg_X=cpdata->Line.Beg_X; End_X=cpdata->Line.End_X; Beg_Y=cpdata->Line.Beg_Y; End_Y=cpdata->Line.End_Y; for(p=pbeg;p<pend;p++) { if(p->Line.Beg_X==Beg_X&&p->Line.Beg_Y==Beg_Y&&p->Line.End_X==End_X&&p->Line.End_Y==End_Y) { if(!CLINE_SetLineData(hline,p)) { sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CLINE][SetLineData]"); return FALSE; } count--; } } } return TRUE; }
/*---------------------------------------------------------------------------*/ Bool LoadLinesInfo_rv (CLINE_handle hC, void *vB, char *pStr,Bool Hori) { int Cnt; uint32_t err32, nTeor; UN_BUFF *pB; char *vCurr; pB = (UN_BUFF *)vB; vCurr = (char *)pB->vCurr; nTeor = sizeof (DLine); Cnt=CLINE_GetLineCount(hC); if(Cnt*((int)nTeor)>pB->SizeCurr) { sprintf (pStr, "Не хватило памяти под 1, инфо-линии!"); return RV_DOUBT; } Cnt=0; for(CLINE_handle hline=CLINE_GetFirstLine(hC);hline;hline=CLINE_GetNextLine(hline)) { CPDLine cpdata=CLINE_GetLineData(hline); err32 = CLINE_GetReturnCode (); if(!cpdata) { #ifdef Almi AM_Console ("RLTABLE : Ошибка чужой библиотеки - [CLINE]%s", "[GetLineData]"); #endif return FALSE; } if(Hori&&cpdata->Dir==LD_Horiz||(!Hori&&cpdata->Dir!=LD_Horiz)) { CLINE_CopyData(vCurr,cpdata,nTeor); vCurr += nTeor; Cnt++; } } EndLastDataPart (vB,UN_DA_Unknown,UN_DT_ClineLine,nTeor,Cnt); return TRUE; }
void SeparatorsGet (void) { #define ABS1 10 #define ABS2 40 //int nl; PAGEINFO pInfo; // LineInfo lInfo; // LinesTotalInfo lti; // Handle pBlock; Handle pPage; // uint32_t HorType; // uint32_t VerType; uint32_t ResolutionCoeff; uint32_t i,j; Handle hPage = CPAGE_GetHandlePage(CPAGE_GetCurrentPage( )); Handle hBlock; // Point16 p_start, p_end; uint32_t key; uint32_t color; int32_t nPics; POLY_ *pPics; // extern Handle hUseCLine; uint32_t size_line_com=sizeof(LINE_COM); CLINE_handle hline; extern CLINE_handle HCLINE; pPage = CPAGE_GetHandlePage(CPAGE_GetCurrentPage( )); CPAGE_GetPageData( pPage, PT_PAGEINFO, (void*)&pInfo, sizeof(pInfo)); ResolutionCoeff = pInfo.DPIY/2; SeparatorsFreeData (); // if(!LDPUMA_Skip(hUseCLine)) // { hline = CLINE_GetFirstLine(HCLINE); if(!hline) return; while(hline) { CPDLine cpdata=CLINE_GetLineData(hline); if(!cpdata) hline=CLINE_GetNextLine(hline); else { nSeps++; pSeps = realloc (pSeps, nSeps*sizeof(SEPARATOR)); pSeps [nSeps-1].xBegin = cpdata->Line.Beg_X; pSeps [nSeps-1].yBegin = cpdata->Line.Beg_Y; pSeps [nSeps-1].xEnd = cpdata->Line.End_X; pSeps [nSeps-1].yEnd = cpdata->Line.End_Y; pSeps [nSeps-1].nWidth = cpdata->Line.Wid10/10; if(cpdata->Dir==LD_Horiz) pSeps [nSeps-1].Type = SEP_HORZ; else pSeps [nSeps-1].Type = SEP_VERT; hline=CLINE_GetNextLine(hline); } } // } /* else { pBlock = CPAGE_GetBlockFirst ( pPage, RLINE_BLOCK_TYPE ); if(pBlock == NULL) return; CPAGE_GetBlockData( pPage, pBlock, RLINE_BLOCK_TYPE, <i, sizeof(LinesTotalInfo)); HorType = (uint32_t)lti.Hor.Lns; VerType = (uint32_t)lti.Ver.Lns; pBlock = CPAGE_GetBlockFirst ( pPage, HorType ); while ( pBlock ) { CPAGE_GetBlockData( pPage, pBlock, HorType, &lInfo, sizeof(LineInfo)); nSeps++; pSeps = realloc (pSeps, nSeps*sizeof(SEPARATOR)); pSeps [nSeps-1].xBegin = lInfo.A.x; pSeps [nSeps-1].yBegin = lInfo.A.y; pSeps [nSeps-1].xEnd = lInfo.B.x; pSeps [nSeps-1].yEnd = lInfo.B.y; pSeps [nSeps-1].nWidth = lInfo.Thickness; pSeps [nSeps-1].Type = SEP_HORZ; pBlock = CPAGE_GetBlockNext( pPage, pBlock, HorType ); } pBlock = CPAGE_GetBlockFirst ( pPage, VerType ); while ( pBlock ) { CPAGE_GetBlockData( pPage, pBlock, VerType, &lInfo, sizeof(LineInfo)); nSeps++; pSeps = realloc (pSeps, nSeps*sizeof(SEPARATOR)); pSeps [nSeps-1].xBegin = lInfo.A.x; pSeps [nSeps-1].yBegin = lInfo.A.y; pSeps [nSeps-1].xEnd = lInfo.B.x; pSeps [nSeps-1].yEnd = lInfo.B.y; pSeps [nSeps-1].nWidth = lInfo.Thickness; pSeps [nSeps-1].Type = SEP_VERT; pBlock = CPAGE_GetBlockNext( pPage, pBlock, VerType ); } } */ color = 200; key = 111; /* Deleting short separators */ for(i = 0; i < nSeps; i++) { if(pSeps [i].Type == SEP_VERT) { if(pSeps[i].yEnd - pSeps[i].yBegin < ResolutionCoeff) { DeleteSeps(i); i--; } else { /* p_start.x = pSeps[i].xBegin; p_start.y = pSeps[i].yBegin; p_end.x = pSeps[i].xEnd; p_end.y = pSeps[i].yEnd; LDPUMA_DrawLine(NULL, &p_start, &p_end, 0, color, 4, key); */ } } else { if(pSeps[i].xEnd - pSeps[i].xBegin < ResolutionCoeff) { DeleteSeps(i); i--; } else { /* p_start.x = pSeps[i].xBegin; p_start.y = pSeps[i].yBegin; p_end.x = pSeps[i].xEnd; p_end.y = pSeps[i].yEnd; LDPUMA_DrawLine(NULL, &p_start, &p_end, 0, color, 4, key); */ } } } //LDPUMA_WaitUserInput(NULL, NULL); //LDPUMA_DeleteLines(NULL, key); /* Deleting separators from pictures */ nPics = 0; pPics = NULL; # define PICS_QUANTUM 128 for(hBlock = CPAGE_GetBlockFirst(hPage,TYPE_IMAGE); hBlock!=NULL; hBlock = CPAGE_GetBlockNext(hPage,hBlock,TYPE_IMAGE)) { if (nPics % PICS_QUANTUM == 0) { pPics = realloc (pPics, (size_t) ((nPics / PICS_QUANTUM + 1) * PICS_QUANTUM * sizeof (POLY_))); } CPAGE_GetBlockData(hPage,hBlock,TYPE_IMAGE, &pPics[nPics++], sizeof(POLY_)); } for (i = 0; i < nPics; i++) { for (j = 0; j < nSeps; j++) { if( (pSeps[j].xBegin > pPics[i].com.Vertex[0].x-10) && (pSeps[j].yBegin > pPics[i].com.Vertex[0].y-10) && (pSeps[j].xEnd < pPics[i].com.Vertex[1].x+10) && (pSeps[j].yEnd < pPics[i].com.Vertex[2].y+10)) { DeleteSeps(j); j--; } } } if (pPics != NULL) { free (pPics); pPics = NULL; } nPics = 0; /* Удаление близколежащих сепараторов */ for (i = 0; i < nSeps; i++) { for (j = 0; j < nSeps; j++) { if(pSeps [i].Type == SEP_VERT && pSeps [j].Type == SEP_VERT) { if((uint32_t)(abs(pSeps[i].xBegin - pSeps[j].xEnd ) < ResolutionCoeff/2) && (uint32_t)(abs(pSeps[i].xEnd - pSeps[j].xBegin) < ResolutionCoeff/2) && (pSeps[i].yBegin < pSeps[j].yBegin) && (pSeps[i].yEnd > pSeps[j].yEnd)) { DeleteSeps(j); j--; } } } } /* Объединение сепараторов */ for (i = 0; i < nSeps; i++) { for (j = 0; j < nSeps; j++) { if(pSeps [i].Type == SEP_VERT && pSeps [j].Type == SEP_VERT) { if((abs(pSeps[i].xBegin - pSeps[j].xEnd) < ABS1) && (pSeps[i].yBegin > pSeps[j].yEnd) && (uint32_t)(pSeps[i].yBegin - pSeps[j].yEnd) < ResolutionCoeff/2) { pSeps[i].xBegin = MIN(pSeps[i].xBegin, pSeps[j].xBegin); pSeps[i].xEnd = MAX(pSeps[i].xEnd, pSeps[j].xEnd); pSeps[i].yBegin = pSeps[j].yBegin; DeleteSeps(j); j--; } } if(pSeps [i].Type == SEP_HORZ && pSeps [j].Type == SEP_HORZ) { if((abs(pSeps[i].yBegin - pSeps[j].yEnd) < ABS1) && (pSeps[i].xBegin > pSeps[j].xEnd) && (pSeps[i].xBegin - pSeps[j].xEnd) < ABS2) { pSeps[i].yBegin = MIN(pSeps[i].yBegin, pSeps[j].yBegin); pSeps[i].yEnd = MAX(pSeps[i].yEnd, pSeps[j].yEnd); pSeps[i].xBegin = pSeps[j].xBegin; DeleteSeps(j); j--; } } } } /* for(i = 0; i < nSeps; i++) { color = 200; key = 111; p_start.x = pSeps[i].xBegin; p_start.y = pSeps[i].yBegin; p_end.x = pSeps[i].xEnd; p_end.y = pSeps[i].yEnd; LDPUMA_DrawLine(NULL, &p_start, &p_end, 0, color, 4, key); } */ //LDPUMA_WaitUserInput(NULL, NULL); }
Bool32 DeleteLines(Handle hCPage,void* phCLINE, const char* ImageDelLines) { // LDPUMA_ConsoleN("Активизируется функция тривиального удаления линий"); int time=clock(); CLINE_handle* pCLINE=(CLINE_handle*)phCLINE; MyLine* pHorLines=NULL; MyLine* pVerLines=NULL; int nHorLines=0; int nVerLines=0; int len_hor_mas=0; int len_ver_mas=0; int add_len_mas=50; uint32_t size_lineinfo=sizeof(LineInfo); if(!LDPUMA_Skip(NotKillPointed)) fl_not_kill_pointed=TRUE; else fl_not_kill_pointed=FALSE; dphNotTestAlik=!LDPUMA_Skip(hNotTestAlik); CIMAGEIMAGECALLBACK cbk; CIMAGEIMAGECALLBACK cbk1; // LinesTotalInfo lti; // LineInfo linfo; // собственно, что и надо PAGEINFO info = {0}; // Описание страницы // Handle pBlock; // uint32_t size32; int i; // uint32_t HorType; // uint32_t VerType; Bool fl_cont; uchar ImageName[CPAGE_MAXNAME]; // Получаем PAGEINFO текущей страницы GetPageInfo(hCPage,&info); // Копируем в pImage из PInfo указатель на изображение, // связанное со страницей for(i=0;i<CPAGE_MAXNAME;i++) ImageName[i]=info.szImageName[i]; if (!CIMAGE_GetCallbackImage(ImageName,&cbk)) return FALSE; cbk1.CIMAGE_ImageOpen = cbk.CIMAGE_ImageOpen; cbk1.CIMAGE_ImageRead = cbk.CIMAGE_ImageRead; cbk1.CIMAGE_ImageClose = cbk.CIMAGE_ImageClose; if (!CIMAGE_WriteCallbackImage((uchar*)ImageDelLines,cbk1)) { return FALSE; } Handle lpDIB; if(!CIMAGE_ReadDIB((uchar*)ImageDelLines,&lpDIB,1)) { CIMAGE_DeleteImage((uchar*)ImageDelLines); return FALSE; } CTDIB* ctdib = new CTDIB; if(!ctdib) { CIMAGE_DeleteImage((uchar*)ImageDelLines); return FALSE; } ctdib->SetDIBbyPtr (lpDIB); const int bytewide=ctdib->GetLineWidthInBytes(); int num_str=ctdib->GetLinesNumber (); // int bytesize=ctdib->GetImageSizeInBytes (); uchar* pmasp=(uchar*)(ctdib->GetPtrToBitFild()); // uchar* pos=(uchar*)(ctdib->GetPtrToPixel (pHorLines[0].begx,pHorLines[0].begy)); // uchar* pos2=(uchar*)(ctdib->GetPtrToPixel (pHorLines[0].begx,pHorLines[0].begy)); uint32_t size_line_com=sizeof(LINE_COM); CLINE_handle hline; if(LDPUMA_Skip(ObvKillLines)) { for(hline=CLINE_GetFirstLine(*pCLINE);hline;hline=CLINE_GetNextLine(hline)) { DelLineFromInside(pmasp,bytewide,num_str,hline); } } else//тривиальное снятие линий { // if(!LDPUMA_Skip(hUseCLine)) // { hline = CLINE_GetFirstLine(*pCLINE); nHorLines=0; len_hor_mas=50; nVerLines=0; len_ver_mas=50; if(!InitLineMas(&pHorLines,len_hor_mas)) { ctdib->ResetDIB (); delete ctdib; CIMAGE_DeleteImage((uchar*)ImageDelLines); return FALSE; } if(!InitLineMas(&pVerLines,len_ver_mas)) { DelLineMas(pHorLines); ctdib->ResetDIB (); delete ctdib; CIMAGE_DeleteImage((uchar*)ImageDelLines); return FALSE; } while(hline) { CPDLine cpdata; fl_cont=FALSE; cpdata=CLINE_GetLineData(hline); if(!cpdata) hline=CLINE_GetNextLine(hline); else { if((cpdata->Flags & LI_IsTrue)&&(!fl_not_kill_pointed||(fl_not_kill_pointed&&cpdata->Type!=NR_DT_LinePointed))) { if(cpdata->Dir==LD_Horiz) { if(nHorLines>=len_hor_mas) { if(!AddLenLineMas(&pHorLines,len_hor_mas,add_len_mas)) { fl_cont=TRUE; hline=CLINE_GetNextLine(hline); } } if(!fl_cont) { pHorLines[nHorLines].begx=cpdata->Line.Beg_X; pHorLines[nHorLines].begy=cpdata->Line.Beg_Y; pHorLines[nHorLines].endx=cpdata->Line.End_X; pHorLines[nHorLines].endy=cpdata->Line.End_Y; pHorLines[nHorLines].wide10=cpdata->Line.Wid10; nHorLines++; hline=CLINE_GetNextLine(hline); } } else { if(nVerLines>=len_ver_mas) { if(!AddLenLineMas(&pVerLines,len_ver_mas,add_len_mas)) { fl_cont=TRUE; hline=CLINE_GetNextLine(hline); } } if(!fl_cont) { pVerLines[nVerLines].begx=cpdata->Line.Beg_X; pVerLines[nVerLines].begy=cpdata->Line.Beg_Y; pVerLines[nVerLines].endx=cpdata->Line.End_X; pVerLines[nVerLines].endy=cpdata->Line.End_Y; pVerLines[nVerLines].wide10=cpdata->Line.Wid10; nVerLines++; hline=CLINE_GetNextLine(hline); } } } else hline=CLINE_GetNextLine(hline); } } /* } else { pBlock=NULL; pBlock = CPAGE_GetBlockFirst (hCPage, RLINE_BLOCK_TYPE ); if( pBlock==NULL) { info.Images|=IMAGE_DELLINE; SetPageInfo(hCPage,info); ctdib->ResetDIB (); delete ctdib; return TRUE; } size32 = CPAGE_GetBlockData(hCPage, pBlock, RLINE_BLOCK_TYPE, <i, sizeof(LinesTotalInfo)); if (size32 != sizeof(LinesTotalInfo) ) { ctdib->ResetDIB (); delete ctdib; CIMAGE_DeleteImage((uchar*)ImageDelLines); return FALSE; } HorType = (uint32_t)lti.Hor.Lns; VerType = (uint32_t)lti.Ver.Lns; ///////////////////////////////////////////////////////////////////////////////////////////// nHorLines=0; len_hor_mas=50; if(!InitLineMas(&pHorLines,len_hor_mas)) { ctdib->ResetDIB (); delete ctdib; CIMAGE_DeleteImage((uchar*)ImageDelLines); return FALSE; } pBlock=NULL; pBlock = CPAGE_GetBlockFirst(hCPage,HorType); while (pBlock) { fl_cont=FALSE; size32 = CPAGE_GetBlockData(hCPage,pBlock,HorType,&linfo,size_lineinfo); if(size32!=size_lineinfo) { fl_cont=TRUE; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,HorType); } if(fl_cont) continue; if(!(linfo.Flags&LI_IsTrue)||(fl_not_kill_pointed&&(linfo.Flags&LI_Pointed))) { fl_cont=TRUE; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,HorType); } if(fl_cont) continue; if(nHorLines>=len_hor_mas) { if(!AddLenLineMas(&pHorLines,len_hor_mas,add_len_mas)) { fl_cont=TRUE; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,HorType); } } if(fl_cont) continue; pHorLines[nHorLines].begx=linfo.A.x; pHorLines[nHorLines].begy=linfo.A.y; pHorLines[nHorLines].endx=linfo.B.x; pHorLines[nHorLines].endy=linfo.B.y; pHorLines[nHorLines].wide10=(linfo.Thickness)*10; nHorLines++; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,HorType); } ///////////////////////////////////////////////////////////////////////////////////////////// nVerLines=0; len_ver_mas=50; pBlock=NULL; pBlock = CPAGE_GetBlockFirst(hCPage,VerType); if(!InitLineMas(&pVerLines,len_ver_mas)) { ctdib->ResetDIB (); delete ctdib; CIMAGE_DeleteImage((uchar*)ImageDelLines); DelLineMas(pHorLines); return FALSE; } while (pBlock) { fl_cont=FALSE; size32 = CPAGE_GetBlockData(hCPage,pBlock,VerType,&linfo,size_lineinfo); if(size32!=size_lineinfo) { fl_cont=TRUE; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,VerType); } if(fl_cont) continue; if(!(linfo.Flags&LI_IsTrue)||(fl_not_kill_pointed&&(linfo.Flags&LI_Pointed))) { fl_cont=TRUE; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,VerType); } if(fl_cont) continue; if(nVerLines>=len_ver_mas) { if(!AddLenLineMas(&pVerLines,len_ver_mas,add_len_mas)) { fl_cont=TRUE; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,VerType); } } if(fl_cont) continue; pVerLines[nVerLines].begx=linfo.A.x; pVerLines[nVerLines].begy=linfo.A.y; pVerLines[nVerLines].endx=linfo.B.x; pVerLines[nVerLines].endy=linfo.B.y; pVerLines[nVerLines].wide10=(linfo.Thickness)*10; nVerLines++; pBlock = CPAGE_GetBlockNext(hCPage,pBlock,VerType); } } */ ///////////////////////////////////////////////////////////////////////////////////////////// int time_hor=clock(); for(i=0;i<nHorLines;i++) { if(pHorLines[i].begx>pHorLines[i].endx) DelOneHorLine(pmasp,bytewide,num_str,pHorLines[i].endx,pHorLines[i].endy,pHorLines[i].begx,pHorLines[i].begy,pHorLines[i].wide10); else DelOneHorLine(pmasp,bytewide,num_str,pHorLines[i].begx,pHorLines[i].begy,pHorLines[i].endx,pHorLines[i].endy,pHorLines[i].wide10); } time_hor=clock()-time_hor; // LDPUMA_ConsoleN("Time hor=%d",time_hor); int time_ver=clock(); for(i=0;i<nVerLines;i++) { if(pVerLines[i].begy>pVerLines[i].endy) DelOneVerLine(pmasp,bytewide,num_str,pVerLines[i].endx,pVerLines[i].endy,pVerLines[i].begx,pVerLines[i].begy,pVerLines[i].wide10); else DelOneVerLine(pmasp,bytewide,num_str,pVerLines[i].begx,pVerLines[i].begy,pVerLines[i].endx,pVerLines[i].endy,pVerLines[i].wide10); } time_ver=clock()-time_ver; // LDPUMA_ConsoleN("Time ver=%d",time_ver); DelLineMas(pHorLines); DelLineMas(pVerLines); }//конец тривиального удаления ctdib->ResetDIB (); delete ctdib; info.Images|=IMAGE_DELLINE; SetPageInfo(hCPage,info); time=clock()-time; // LDPUMA_ConsoleN("Time work=%d",time); return TRUE; }
Bool32 AboutLines (PRSPreProcessImage Image, Bool32 *BadScan, int32_t *ScanQual) { int SizeMain, SizeWork; UN_BUFF MainBuff = {0}; void *vMain; char *cWork; Bool32 bRc = TRUE; ////////////////////////////////////////////////////////////////////////////////// Buffer = (char *)RSLAlloc(RSL_AboutLines_SizeMyBuff); WorkMem = (char *)RSLAlloc(RSL_AboutLines_SizeWorkMem); if (Buffer == NULL || WorkMem == NULL ) { SetReturnCode_rshelllines((uint16_t)RSL_ERR_NO_MEMORY); bRc = FALSE; } if ( bRc ) do { ////////////////////////////////////////////////////////////////////////////////////// /* 1. Контроль. */ if ((Image->pgneed_clean_line==NULL)&&(BadScan!=NULL)) break; //return TRUE; /* 2. Инициализация. */ vMain = Buffer; SizeMain = RSL_AboutLines_SizeMyBuff; MainBuff.vBuff = vMain; MainBuff.SizeBuff = SizeMain; MainBuff.vCurr = MainBuff.vBuff; MainBuff.SizeCurr = MainBuff.SizeBuff; cWork = WorkMem; SizeWork = RSL_AboutLines_SizeWorkMem; if (Image->pgneed_clean_line!=NULL) { *Image->pgneed_clean_line = FALSE; CLINE_handle hCLINE=*((CLINE_handle*)(Image->phCLINE)); Bool fl_break=FALSE; for(CLINE_handle hline=CLINE_GetFirstLine(hCLINE);hline;hline=CLINE_GetNextLine(hline)) { CPDLine cpdata=CLINE_GetLineData(hline); if(!cpdata) continue; if(cpdata->Flags&LI_IsTrue) { *Image->pgneed_clean_line=TRUE; fl_break=TRUE; } if(fl_break) break; } if (1) { if (*Image->pgneed_clean_line) LDPUMA_ConsoleN ("RSource: Нужно снять линии."); else LDPUMA_ConsoleN ("RSource: Не надо снимать линии!"); } } // } if (BadScan!=NULL) { if (1) LDPUMA_ConsoleN ("RSource: Качество сканирования : не умею пока определять."); *BadScan = TRUE; *ScanQual = 100; } } while ( false ); RSLFree(Buffer); RSLFree(WorkMem); return bRc; }