⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rip.cpp

📁 合成4个代表K,C,M,Y通道的BMP位图为打印数据
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if(y%3==0)
		{
		*lbc2=*(lbc2++)&0x49;
		*lbm2=*(lbm2++)&0x49;
		*lby2=*(lby2++)&0x49;
		*lbk2=*(lbk2++)&0x49;
		}
		else if(y%3==1)
		{
		*lbc2=*(lbc2++)&0x24;
		*lbm2=*(lbm2++)&0x24;
		*lby2=*(lby2++)&0x24;
		*lbk2=*(lbk2++)&0x24;		
		}
	    else
		{
		*lbc2=*(lbc2++)&0x92;
		*lbm2=*(lbm2++)&0x92;
		*lby2=*(lby2++)&0x92;
		*lbk2=*(lbk2++)&0x92;
		}
	}

		else	
	for(int x=0;x<500;x++)	
	for(DWORD y=0;y<rh.BytesPerLine;y++)
	{
		if(y%3==0)
		{
		*lbc2=*(lbc2++)&0x24;
		*lbm2=*(lbm2++)&0x24;
		*lby2=*(lby2++)&0x24;
		*lbk2=*(lbk2++)&0x24;		
		}
		else if(y%3==1)
		{
		*lbc2=*(lbc2++)&0x92;
		*lbm2=*(lbm2++)&0x92;
		*lby2=*(lby2++)&0x92;
		*lbk2=*(lbk2++)&0x92;
		}
	else
		{
		*lbc2=*(lbc2++)&0x49;
		*lbm2=*(lbm2++)&0x49;
		*lby2=*(lby2++)&0x49;
		*lbk2=*(lbk2++)&0x49;
		}
	}
 }

////////////////////  pass=4  ///////////////////////////////////////
	else if(pass==4)
	{
		if(i%pass==0)
			for(int x=0;x<500;x++)
				for(DWORD y=0;y<rh.BytesPerLine;y++)
				{	
					if(x%2==0)
					{
					*lbc2=*(lbc2++)&0xaa;
					*lbm2=*(lbm2++)&0xaa;
					*lby2=*(lby2++)&0xaa;
					*lbk2=*(lbk2++)&0xaa;
					}
					else
					{
					*lbc2=*(lbc2++)&0x00;
					*lbm2=*(lbm2++)&0x00;
					*lby2=*(lby2++)&0x00;
					*lbk2=*(lbk2++)&0x00;
					}

				}
			else if(i%pass==1)
			for(int x=0;x<500;x++)
				for(DWORD y=0;y<rh.BytesPerLine;y++)
				{	
					if(x%2==0)
					{
					*lbc2=*(lbc2++)&0x55;
					*lbm2=*(lbm2++)&0x55;
					*lby2=*(lby2++)&0x55;
					*lbk2=*(lbk2++)&0x55;
					}
					else 
					{	
					*lbc2=*(lbc2++)&0x00;
					*lbm2=*(lbm2++)&0x00;
					*lby2=*(lby2++)&0x00;
					*lbk2=*(lbk2++)&0x00;
					}
				}
			else if(i%pass==2)
			for(int x=0;x<500;x++)
				for(DWORD y=0;y<rh.BytesPerLine;y++)
				{
				    if(x%2==0)
					{
					*lbc2=*(lbc2++)&0x00;
					*lbm2=*(lbm2++)&0x00;
					*lby2=*(lby2++)&0x00;
					*lbk2=*(lbk2++)&0x00;
					}
					else
					{
					*lbc2=*(lbc2++)&0xaa;
					*lbm2=*(lbm2++)&0xaa;
					*lby2=*(lby2++)&0xaa;
					*lbk2=*(lbk2++)&0xaa;
					}
				}
		   else
			for(int x=0;x<500;x++)
				for(DWORD y=0;y<rh.BytesPerLine;y++)
				{			   
					if(x%2==0)
					{	
					*lbc2=*(lbc2++)&0x00;
					*lbm2=*(lbm2++)&0x00;
					*lby2=*(lby2++)&0x00;
					*lbk2=*(lbk2++)&0x00;
					}
					else
					{
					*lbc2=*(lbc2++)&0x55;
					*lbm2=*(lbm2++)&0x55;
					*lby2=*(lby2++)&0x55;
					*lbk2=*(lbk2++)&0x55;
					}
				}
		}		
}

////////////////// read orderly //////////////////////////////////////////////////////////////
// one pass,single cache,500 lines height per times,don't dump dot,rip to cache1;
//////////////////////////////////////////////////////////////////////////////////////////////
void CRip::SendMemory(DWORD i)
{
	
	LPBYTE lbc=lpmemc1,lbm=lpmemm1,lby=lpmemy1,lbk=lpmemk1;
	ZeroMemory(lpmemc1,500*rh.BytesPerLine);
	ZeroMemory(lpmemm1,500*rh.BytesPerLine);
	ZeroMemory(lpmemy1,500*rh.BytesPerLine);
	ZeroMemory(lpmemk1,500*rh.BytesPerLine);

	filer.Seek(sizeof(RipHeader)+i*2000,CFile::begin);
   if((rh.Height*4-i*2000)>2000)
   {     
	 for(DWORD x=0;x<2000;x++)
	{
		
		if((x%4)==0)
		{
	    filer.Read(lby,rh.BytesPerLine);
		lby=lby+rh.BytesPerLine;
		}
		if((x%4)==1)
		{
	    filer.Read(lbm,rh.BytesPerLine);
	   lbm=lbm+rh.BytesPerLine;
		}
		if((x%4)==2)
		{
		 filer.Read(lbc,rh.BytesPerLine);
		lbc=lbc+rh.BytesPerLine;
		}
		if((x%4)==3)
		{
	    filer.Read(lbk,rh.BytesPerLine);
		lbk=lbk+rh.BytesPerLine;
		}
	}
   }
            
		else
		{
			for(DWORD x=0;x<rh.Height*4-i*2000;x++)
		{		
		if((x%4)==0)
		{
	    filer.Read(lby,rh.BytesPerLine);
		lby=lby+rh.BytesPerLine;
		}
		if((x%4)==1)
		{
	    filer.Read(lbm,rh.BytesPerLine);
	   lbm=lbm+rh.BytesPerLine;
		}
		if((x%4)==2)
		{
	 filer.Read(lbc,rh.BytesPerLine);
		lbc=lbc+rh.BytesPerLine;
		}
		if((x%4)==3)
		{
	 filer.Read(lbk,rh.BytesPerLine);
		lbk=lbk+rh.BytesPerLine;
		}
		}
		}
	}

//-------------------------------------------------------------------------------------------------------------------
// use for 3 or 4 pass ,500/pass linesheight per strip,send 500 linesheight to lpmemc1、k1、y1、m1 from filer;
// mem1to2():from lpmemc1...to lpmemc2...;  pumpdot(): pumping dot arithmetic.  
// < " // " sentence is send 500 linesheight to lpmemc1、k1、y1、m1 from filec、m、y、k directly;
//------------------------- read rip file from begin to end  ---------------------------
void CRip::SendToMemory(DWORD i)
{	  	 
	LPBYTE lbc=lpmemc1,lbm=lpmemm1,lby=lpmemy1,lbk=lpmemk1;	
	if((i==count-pass)&&((rh.Height/(500/pass))!=(ULONG)ceil((float)rh.Height/(500/pass))))
	{	
		filer.Seek(48l+4*i*(500/pass)*rh.BytesPerLine,CFile::begin);
		for(unsigned x=0;x<rh.Height-i*(500/pass);x++)  
		{
    filer.Read(lby+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	 filer.Read(lbm+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	
	filer.Read(lbc+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	filer.Read(lbk+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);

	lby+=rh.BytesPerLine;
	lbm+=rh.BytesPerLine;
	lbc+=rh.BytesPerLine;
	lbk+=rh.BytesPerLine;
		}
       ZeroMemory(lbc+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
       ZeroMemory(lbm+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
	   ZeroMemory(lby+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
	   ZeroMemory(lbk+((i+pass-1)%pass)*(500/pass)*rh.BytesPerLine,((i+1)*(500/pass)-rh.Height)*rh.BytesPerLine);
	}


	else if(i>count-pass)
	{
		ZeroMemory(lbc+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
		ZeroMemory(lbm+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
		ZeroMemory(lby+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
		ZeroMemory(lbk+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,(500/pass)*rh.BytesPerLine);
	}

	else
	{
	filer.Seek(48l+4*i*(500/pass)*rh.BytesPerLine,CFile::begin);
	for(int x=0;x<500/pass;x++)
	{
	filer.Read(lby+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	filer.Read(lbm+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	filer.Read(lbc+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	filer.Read(lbk+(500/pass)*((i+pass-1)%pass)*rh.BytesPerLine,rh.BytesPerLine);
	lby+=rh.BytesPerLine;
	lbm+=rh.BytesPerLine;
	lbc+=rh.BytesPerLine;
	lbk+=rh.BytesPerLine;
	}		
	}

//--------------------------------------------------------------------------------------

}
///////////////////////////////////////////////////////////////////////////////////////////////
///////   only use for change memory to monochromatic bmp image;( USE FOR DEBUG ) /////
////////////////////////////////////////////////////////////////////////////////////////////////
void CRip::Mem2bmp(DWORD i,LPCVOID pbits, DWORD width, DWORD height)
{		
	CString string1,string2;

		/////////// get strc filename  ////////
	string2=strs.Left(strs.GetLength()-4);
	string2=string2+"_c.bmp";

	string1.Format("%d",i);
	int x=string2.GetLength();
	string2.Insert((x-4),(LPCTSTR)string1);

	CFile file(string2,CFile::modeCreate|CFile::modeWrite);
	BITMAPFILEHEADER bfheader;
	BITMAPINFOHEADER biheader;
	RGBQUAD color[2];

	bfheader.bfType=0x4d42;
	bfheader.bfSize=height*((width+31)/32*4)+2*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
	bfheader.bfReserved1=0;
	bfheader.bfReserved2=0;
	bfheader.bfOffBits=2*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
		
		biheader.biBitCount=1;
		biheader.biClrImportant=0;
		biheader.biClrUsed=0;
		biheader.biCompression=0;
		biheader.biHeight=height;
		biheader.biWidth=width;
		biheader.biPlanes=1;
		biheader.biSize=sizeof(BITMAPINFOHEADER);
		biheader.biSizeImage=((width+31)/32*4)*height;
		biheader.biXPelsPerMeter=(long)ceil(10000*rh.XDPI/254.0);
		biheader.biYPelsPerMeter=(long)ceil(10000*rh.YDPI/254.0);
		
		color[0].rgbBlue=0xff;
		color[0].rgbGreen=0xff;
		color[0].rgbRed=0xff;
		color[0].rgbReserved=0x0;
		color[1].rgbBlue=0x0;
		color[1].rgbGreen=0x0;
		color[1].rgbRed=0x0;
		color[1].rgbReserved=0x0;
		
		file.Write(&bfheader,sizeof(BITMAPFILEHEADER));
		file.Write(&biheader,sizeof(BITMAPINFOHEADER));
		file.Write(&color,sizeof(color));
		file.Write(pbits,height*((width+31)/32*4));
}

///////////////////////////////////////////////////////////////////////////////////////////


Inkstruct CRip::GetInkNums()
{
	return InkNums;
}


//------------- read four lines to memory,loop rh.Heignt times;------------------------
void CRip::CalcInks()
{
	unsigned dotnum[256]={0};
	LPBYTE lp=new BYTE[4*4000];

	for(unsigned x=0;x<256;x++)
	{
		if(x&1)
			dotnum[x]++;
		if(x&2)
			dotnum[x]++;
		if(x&4)
			dotnum[x]++;
		if(x&8)
			dotnum[x]++;
		if(x&16)
			dotnum[x]++;
		if(x&32)
			dotnum[x]++;
		if(x&64)
			dotnum[x]++;
		if(x&128)
			dotnum[x]++;
	}	
	filer.Seek(sizeof(RipHeader),CFile::begin);
      
	for(DWORD h=0;h<rh.Height;h++)
	{
		 filer.Read(lp,4*rh.BytesPerLine);
		 DWORD y;
		 LPBYTE lpcopy=lp;
			for(y=0;y<rh.BytesPerLine;y++)// yellow line
			{				
				InkNums.Inky+=dotnum[*lpcopy++];
			}
	
			for( y=0;y<rh.BytesPerLine;y++)// magenta line
			{			
				InkNums.Inkm+=dotnum[*lpcopy++];
			}

			for( y=0;y<rh.BytesPerLine;y++)// cyan line
			{			
				InkNums.Inkc+=dotnum[*lpcopy++];
			}
	
			for( y=0;y<rh.BytesPerLine;y++)// black line
			{			
				InkNums.Inkk+=dotnum[*lpcopy++];
			}
		}
	delete [] lp;
	lp=0;
}

//--------------------------------------------------------------------------------------

void CRip::Reversemem()
{

  LPBYTE tempmem=new BYTE[rh.BytesPerLine];
  for(int count=0;count<250;count++)
  {
	  CopyMemory(tempmem,lpmemc2+count*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemc2+count*rh.BytesPerLine,lpmemc2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemc2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);

 	  CopyMemory(tempmem,lpmemm2+count*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemm2+count*rh.BytesPerLine,lpmemm2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemm2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);

	  CopyMemory(tempmem,lpmemy2+count*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemy2+count*rh.BytesPerLine,lpmemy2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemy2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);

	  CopyMemory(tempmem,lpmemk2+count*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemk2+count*rh.BytesPerLine,lpmemk2+(500-(count+1))*rh.BytesPerLine,rh.BytesPerLine);
	  CopyMemory(lpmemk2+(500-(count+1))*rh.BytesPerLine,tempmem,rh.BytesPerLine);

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -