📄 dib.cpp
字号:
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 + -