예제 #1
0
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);
    }
}
예제 #2
0
/*----------------------------------------------------------------------------*/
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;
}
예제 #3
0
/*---------------------------------------------------------------------------*/
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;
}
예제 #4
0
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, &lti, 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);

}
예제 #5
0
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, &lti, 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;
}
예제 #6
0
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;
}