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

📄 dib.cpp

📁 合成4个代表K,C,M,Y通道的BMP位图为打印数据
💻 CPP
📖 第 1 页 / 共 2 页
字号:
int CDib::RECTWIDTH(LPRECT lprect)
{
	return lprect->right-lprect->left;
}


//---------------------------------------------------------------------------------
int CDib::RECTHEIGHT(LPRECT lprect)
{
	return lprect->bottom-lprect->top;
}

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


bool CDib::IsSame()
{
	BITMAPFILEHEADER bfc,bfm,bfy,bfk;
	BITMAPINFOHEADER bic,bim,biy,bik;
	HANDLE hfilec,hfilem,hfiley,hfilek;
	LPCTSTR lpc,lpm,lpy,lpk;	
	DWORD dwread;
	CString strs(lps);


	lpc=LPCTSTR(strc);
	lpm=LPCTSTR(strm);
	lpy=LPCTSTR(stry);
	lpk=LPCTSTR(strk);
		

		if((strc==strs)||(strm==strs)||(stry==strs)||(strk==strs))
			{
			MessageBox(NULL,"you select file incorrectly","error",MB_OK);
				return false;
			}


		if(((hfilec=CreateFile(lpc,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL))!=INVALID_HANDLE_VALUE)&&
		((hfilem=CreateFile(lpm,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL))!=INVALID_HANDLE_VALUE)&&
		((hfiley=CreateFile(lpy,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL))!=INVALID_HANDLE_VALUE)&&
        ((hfilek=CreateFile(lpk,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL))!=INVALID_HANDLE_VALUE))
		{		
		ReadFile(hfilec,&bfc,sizeof(BITMAPFILEHEADER),&dwread,NULL);
		ReadFile(hfilem,&bfm,sizeof(BITMAPFILEHEADER),&dwread,NULL);
		ReadFile(hfiley,&bfy,sizeof(BITMAPFILEHEADER),&dwread,NULL);
		ReadFile(hfilek,&bfk,sizeof(BITMAPFILEHEADER),&dwread,NULL);


		ReadFile(hfilec,&bic,sizeof(BITMAPINFOHEADER),&dwread,NULL);
		ReadFile(hfilem,&bim,sizeof(BITMAPINFOHEADER),&dwread,NULL);
		ReadFile(hfiley,&biy,sizeof(BITMAPINFOHEADER),&dwread,NULL);
		ReadFile(hfilek,&bik,sizeof(BITMAPINFOHEADER),&dwread,NULL);
       

		if(bic.biSizeImage==0)
			bic.biSizeImage=((((bic.biWidth*bic.biBitCount)+31)&~31)>>3)*bic.biHeight;// or : ((bic.biWidth*bic.BitCount+31)/32)*4*bic.biHeight 
		if(bim.biSizeImage==0)
			bim.biSizeImage=((((bim.biWidth*bim.biBitCount)+31)&~31)>>3)*bim.biHeight;
		if(biy.biSizeImage==0)
			biy.biSizeImage=((((biy.biWidth*biy.biBitCount)+31)&~31)>>3)*biy.biHeight;
		if(bik.biSizeImage==0)
			bik.biSizeImage=((((bik.biWidth*bik.biBitCount)+31)&~31)>>3)*bik.biHeight;
        
		
		//intialize dibwidth,dibheight,picturesize;   
		dibwidth=bic.biWidth;
		dibheight=bic.biHeight;
		picturesize=(float)((bfm.bfSize*4)/pow(2,20));
		
	//	TRACE("bic:%d,bim:%d",bic.biSizeImage,bim.biSizeImage);
        
	    // str.Format("bic:%d,bim:%d,biy:%d,bik:%d",bic.biBitCount,bim.biClrUsed,biy.biClrImportant,bik.biSizeImage);
		// MessageBox(NULL,str,"IsSame()",MB_OK);

		if((bfc.bfSize==bfm.bfSize)&&(bfm.bfSize==bfy.bfSize)&&(bfy.bfSize==bfk.bfSize)
			&&(bic.biBitCount==bim.biBitCount)&&(bim.biBitCount==biy.biBitCount)&&(biy.biBitCount==bik.biBitCount)
			&&(bic.biHeight==bim.biHeight)&&(bim.biHeight==biy.biHeight)&&(biy.biHeight==bik.biHeight)
			&&(bic.biWidth==bim.biWidth)&&(bim.biWidth==biy.biWidth)&&(biy.biWidth==bik.biWidth)
			&&(bic.biXPelsPerMeter==bim.biXPelsPerMeter)&&(bim.biXPelsPerMeter==biy.biXPelsPerMeter)&&(biy.biXPelsPerMeter==bik.biXPelsPerMeter)
			&&(bic.biSizeImage==bim.biSizeImage)&&(bim.biSizeImage==biy.biSizeImage)&&(biy.biSizeImage==bik.biSizeImage))
		    return true;
			
		}
		
		return false;
}


//---------------------------------------------------------------------------------------------------------------------------
/*
	// 2 pass,move 250 pixel height per 次,send 500 pixel height per 次 
	// param f: is loop counter, no more than x;
void  CDib::SendToMemory(LPCTSTR lpfilename,HANDLE hmem,int f)
{
	

	HANDLE hfilec;//,hfilem,hfiley,hfilek;
	//CString strc,strm,stry,strk;  
	//LPCTSTR lpc,lpm,lpy,lpk;
	
	DWORD dwread=0;

	BITMAPINFOHEADER bic;//,lpbim,lpbiy,lpbik;
	BITMAPFILEHEADER bfc;
    

	if((hfilec=CreateFile(lpfilename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL))!=INVALID_HANDLE_VALUE)
		
	{					
        ReadFile(hfilec,&bfc,sizeof(BITMAPFILEHEADER),&dwread,NULL);
		ReadFile(hfilec,&bic,sizeof(BITMAPINFOHEADER),&dwread,NULL);
	
		if(bic.biSizeImage==0)
			bic.biSizeImage=(((bic.biWidth*(DWORD)bic.biBitCount+31)&~31)>>3)*bic.biHeight;

		DWORD widthperline=((bic.biWidth*(DWORD)bic.biBitCount+31)&~31)>>3;   // unit:byte;
				
	
	
			LPVOID lphnew=GlobalLock(hmem);				
				if((f==0)&&(x!=2))
				{
					ZeroMemory(lphnew,250*widthperline);
					for(int i=0;i<250;i++)
					{
						SetFilePointer(hfilec,0-(i+1)*widthperline,NULL,FILE_END);
			            ReadFile(hfilec,(LPBYTE)lphnew+(250+i)*widthperline,widthperline,&dwread,NULL);
					}
					
				}
				else if((f==0)&&(x==2)
				{
					ZeroMemory(lphnew,250*widthperline);
					for(int i=0;i<bic.biHeight;i++)
					{
						SetFilePointer(hfilec,0-(i+1)*widthperline,NULL,FILE_END);
						ReadFile(hfilec,(LPBYTE)lphnew+(250+i)*widthperline,widthperline,&dwread,NULL);

					}


			else if(f==x-2)
				{
					ZeroMemory(lphnew,500*widthperline);
				//	SetFilePointer(hfilec,0-(f-1)*250*widthperline,NULL,FILE_END);
					for(int a=0;a<bic.biHeight-250*(f-1);a++)
					{
						SetFilePointer(hfilec,0-(f-1)*250*widthperline-(a+1)*widthperline,NULL,FILE_END);
						ReadFile(hfilec,(LPBYTE)lphnew+a*widthperline,widthperline,&dwread,NULL);
					}
				
				}

				else if(f==x-1)
				{
					ZeroMemory(lphnew,500*widthperline);
				//	SetFilePointer(hfilec,0-(f-1)*250*widthperline,NULL,FILE_END);
					for(int a=0;a<bic.biHeight-(f-1)*250;a++)
					{
						SetFilePointer(hfilec,0-(f-1)*250*widthperline-(a+1)*widthperline,NULL,FILE_END);
						ReadFile(hfilec,(LPBYTE)lphnew+a*widthperline,widthperline,&dwread,NULL);
					}
				
				}

   

				else
				{
		           // SetFilePointer(hfilec,0-(f-1)*250*widthperline,NULL,FILE_END);

                   for(int i=0;i<500;i++)
				   {
		             SetFilePointer(hfilec,0-(f-1)*250*widthperline-(i+1)*widthperline,NULL,FILE_END);
		
		            ReadFile(hfilec,(LPBYTE)lphnew+i*widthperline,widthperline,&dwread,NULL);
				   }
				}
			
		
		CloseHandle(hfilec);		
	    GlobalUnlock(hmem);
		
			
	}
	
}
*/
	
//---------------------------------------------------------------------------------------------------------
/*
	// 2 pass,move 250 pixel height per 次,send 500 pixel height per 次 
	// param f: is loop counter, no more than x;
	// order storage
void CDib::SendToMemory(LPCTSTR lpfilename,HANDLE hmem,int f)
{
	HANDLE hfilec;

	DWORD dwread=0;
	BITMAPINFOHEADER bic;
	BITMAPFILEHEADER bfc;   

	if((hfilec=CreateFile(lpfilename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL))!=INVALID_HANDLE_VALUE)
		
	{					
        ReadFile(hfilec,&bfc,sizeof(BITMAPFILEHEADER),&dwread,NULL);
		ReadFile(hfilec,&bic,sizeof(BITMAPINFOHEADER),&dwread,NULL);
	
		if(bic.biSizeImage==0)
			bic.biSizeImage=(((bic.biWidth*(DWORD)bic.biBitCount+31)&~31)>>3)*bic.biHeight;

		DWORD widthperline=((bic.biWidth*(DWORD)bic.biBitCount+31)&~31)>>3;   // unit:byte;
	//	int x=(int)ceil((double)bic.biHeight/250)+1; 
	
	
			LPVOID lphnew=GlobalLock(hmem);				
				if((f==0)&&(x!=2))
				{
					ZeroMemory(lphnew,250*widthperline);	
					SetFilePointer(hfilec,bfc.bfOffBits,NULL,FILE_BEGIN);			
						//SetFilePointer(hfilec,0-(i+1)*widthperline,NULL,FILE_END);
			        ReadFile(hfilec,(LPBYTE)lphnew+250*widthperline,250*widthperline,&dwread,NULL);
					
					
				}

				else if((f==0)&&(x==2))
				{ 
					ZeroMemory(lphnew,500*widthperline);
					SetFilePointer(hfilec,bfc.bfOffBits,NULL,FILE_BEGIN);
                    ReadFile(hfilec,(LPBYTE)lphnew+250*widthperline,bic.biHeight,&dwread,NULL);
				}

			else if(f==x-2)
				{
					ZeroMemory(lphnew,500*widthperline);
				//	SetFilePointer(hfilec,0-(f-1)*250*widthperline,NULL,FILE_END);
				//	for(int a=0;a<bic.biHeight-250*(f-1);a++)
					
						SetFilePointer(hfilec,bfc.bfOffBits+(f-1)*250*widthperline,NULL,FILE_BEGIN);
						ReadFile(hfilec,(LPBYTE)lphnew,(bic.biHeight-250*(f-1))*widthperline,&dwread,NULL);
									
				}

				else if(f==x-1)
				{
					ZeroMemory(lphnew,500*widthperline);
				//	SetFilePointer(hfilec,0-(f-1)*250*widthperline,NULL,FILE_END);
				//	for(int a=0;a<bic.biHeight-(f-1)*250;a++)
					
						SetFilePointer(hfilec,bfc.bfOffBits+(f-1)*250*widthperline,NULL,FILE_BEGIN);
						ReadFile(hfilec,(LPBYTE)lphnew,(bic.biHeight-(f-1)*250)*widthperline,&dwread,NULL);
					     				
				}

   

				else
				{
		           // SetFilePointer(hfilec,0-(f-1)*250*widthperline,NULL,FILE_END);

                   //for(int i=0;i<500;i++)
				   
		             SetFilePointer(hfilec,bfc.bfOffBits+(f-1)*250*widthperline,NULL,FILE_BEGIN);
		
		            ReadFile(hfilec,(LPBYTE)lphnew,500*widthperline,&dwread,NULL);
				   
				}			
		
		CloseHandle(hfilec);
	    GlobalUnlock(hmem);
		
			
	}
	
}
*/

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

CDib::~CDib()
{

}


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

//----------------------------------------------------------------
/*		// load dib from resource;
LPBYTE LoadDIBFromResource(LPTSTR lpszBitmap)
{
	HINSTANCE hinst=AfxGetInstanceHandle();
	//load resource;
	HRSRC hres=::FindResource(hinst,lpszBitmap,"DIB");
		if(hres==NULL)
			return NULL;
		HGLOBAL hdata=::LoadResource(hinst,hres);
		return (LPBYTE)::LockResource(hdata);
}
*/

/////////////////////////////////////////////////////////////////////////////////
/*
				// display DDB

	bool DisplayDDB(CDC* pdc,LPCTSTR lpresourcename)
	{
		CBitmap bmp,*oldbmp;
		BITMAP bm;
	if(!bmp.LoadBitmap(lpresourcename))
		return false;
		CDC memdc;
		bmp.GetObject(sizeof(BITMAP),&bm);
		if(memdc.CreateCompatibleDC(pdc))
			return false;
		oldbmp=memdc.SelectObject(&bmp);
		pdc->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memdc,0,0,SRCCOPY);
		memdc.SelectObject(oldbmp);
		return true;

	}

  */



⌨️ 快捷键说明

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