📄 dib.txt
字号:
void CWzdBitmap::CreateBitmapEx(CSize size)
{
bitmapSize=size;
dcScreen.Attach(::GetDC(NULL));
dcMem.CreateCompatibleDC(&dcScreen) ;
CreateCompatibleBitmap(&dcScreen,size.cx ,size.cy );
dcMem.SelectObject(this) ;
}
CDC* CWzdBitmap::GetDC()
{
return (&dcMem);
}
void CWzdBitmap::PrepareBitmap()
{
int nColors=(1<<(dcScreen.GetDeviceCaps(BITSPIXEL)*dcScreen.GetDeviceCaps(PLANES)));
LOGPALETTE *pLogPal=(LOGPALETTE*)new BYTE(sizeof(LOGPALETTE)+(nColors*sizeof(PALETTEENTRY)));
pLogPal->palVersion=0x300;
pLogPal->palNumEntries=nColors;
::GetSystemPaletteEntries(dcScreen.m_hDC,0,nColors,(LPPALETTEENTRY)(pLogPal->palPalEntry ));
m_Palette=new CPalette;
m_Palette->CreatePalette(pLogPal) ;
delete[] pLogPal;
dcMem.DeleteDC();
::ReleaseDC(NULL,dcScreen.Detach());
m_Width=bitmapSize.cx ;
m_Height=bitmapSize.cy ;
}
HANDLE CWzdBitmap::CreatDIB(int *pbmData)
{
//creat header
BITMAPINFOHEADER bi;
memset(&bi,0,sizeof(bi));
bi.biSize =sizeof(BITMAPINFOHEADER) ;
bi.biPlanes=1;
bi.biCompression=BI_RGB;
BITMAP bm;
GetObject(sizeof(bm),(LPSTR)&bm);
bi.biWidth =bm.bmWidth;
bi.biHeight=bm.bmHeight;
int bits=bm.bmPlanes*bm.bmBitsPixel;
if(bits<=1) bi.biBitCount=1;
else if(bits<=4) bi.biBitCount=4;
else if(bits<=8) bi.biBitCount=8;
else
bi.biBitCount=24;
int biColorSize=0;
if(bi.biBitCount!=24) biColorSize=(1<<bi.biBitCount);
biColorSize*=sizeof(RGBQUAD);
bi.biSizeImage=(((bi.biSizeImage ) +31)/32)*4;
bi.biSizeImage *=bm.bmHeight;
if(pbmData) *(pbmData)=bi.biSize+biColorSize;
HANDLE hDIB=::GlobalAlloc(GHND,bi.biSize +biColorSize+bi.biSizeImage );
LPBITMAPINFOHEADER lpbi=(LPBITMAPINFOHEADER)::GlobalLock(hDIB);
*lpbi=bi;
CDC dc;
dc.Attach (::GetDC(NULL));
CPalette *pPal=dc.SelectPalette(m_Palette,FALSE);
dc.RealizePalette();
return hDIB;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -