16,473
社区成员
发帖
与我相关
我的任务
分享
#define PIXEL_NUM 24
#define PIXEL_COUNT 8
保存BMP代码:
void SaveImage(BYTE *buff, int tWidth, int tHeight, CString OutPath)
{
FILE *fp;
fp = fopen(OutPath, "w");
if( !fp )
{
return;
}
else
{
int iBMPBytes = tWidth * tHeight * PIXEL_NUM / PIXEL_COUNT;
BITMAPINFO lpbmih;
lpbmih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmih.bmiHeader.biWidth = tWidth;
lpbmih.bmiHeader.biHeight = tHeight;
lpbmih.bmiHeader.biPlanes = 1;
lpbmih.bmiHeader.biBitCount = PIXEL_NUM;
lpbmih.bmiHeader.biCompression = BI_RGB;
lpbmih.bmiHeader.biSizeImage = iBMPBytes;
lpbmih.bmiHeader.biXPelsPerMeter = 0;
lpbmih.bmiHeader.biYPelsPerMeter = 0;
lpbmih.bmiHeader.biClrUsed = 0;
lpbmih.bmiHeader.biClrImportant = 0;
BITMAPFILEHEADER bmfh;
ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
bmfh.bfType = 0x4d42;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + (tWidth * tHeight) * PIXEL_NUM / PIXEL_COUNT;
fwrite(&bmfh, 1, sizeof(BITMAPFILEHEADER), fp);
fwrite(&(lpbmih.bmiHeader),1, sizeof(BITMAPINFOHEADER), fp);
fwrite(buff, 1, iBMPBytes, fp);
fclose(fp);
}
}
显示代码:
void Capture(BYTE *buff, int tWidth, int tHeight)
{
BITMAPINFO lpbmih;
lpbmih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmih.bmiHeader.biWidth = tWidth;
lpbmih.bmiHeader.biHeight = tHeight;
lpbmih.bmiHeader.biPlanes = 1;
lpbmih.bmiHeader.biBitCount = PIXEL_NUM;
lpbmih.bmiHeader.biCompression = BI_RGB;
lpbmih.bmiHeader.biSizeImage = 0;
lpbmih.bmiHeader.biXPelsPerMeter = 0;
lpbmih.bmiHeader.biYPelsPerMeter = 0;
lpbmih.bmiHeader.biClrUsed = 0;
lpbmih.bmiHeader.biClrImportant = 0;
RECT rc;
m_StaticDisplay.GetClientRect(&rc);
CDC* srcDc = m_StaticDisplay.GetDC();
SetStretchBltMode(srcDc->m_hDC,COLORONCOLOR);
StretchDIBits(
srcDc->m_hDC,rc.left,rc.top,rc.right,rc.bottom,0,0,tWidth,tHeight,buff,&lpbmih,DIB_RGB_COLORS,SRCCOPY);
ReleaseDC(srcDc);
}