dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize +sizeof(BITMAPINFOHEADER)); //为位图内容分配内存
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
//处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = ::SelectPalette(hDC,(HPALETTE)hPal,FALSE);
RealizePalette(hDC);
}
//获取该调色板下新的像素值
GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);
//恢复调色板
if(hOldPal)
{
::SelectPalette(hDC,(HPALETTE)hOldPal,TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL,hDC);
}
//创建位图文件
fh = CreateFile(FileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if(fh == INVALID_HANDLE_VALUE) return FALSE;
//设置位图文件头
bmfHdr.bfType = 0x4D42; //"BM"
dwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize; 本文来自优.文~论^文·网原文请找腾讯32,49114
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER) +(DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;
//写入位图文件头 WriteFile(fh,(LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER),&dwWritten,NULL;
//写入位图文件其余内容
WriteFile(fh,(LPSTR)lpbi,dwDIBSize,&dwWritten,NULL);
论文网http://www.youerw.com/
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
(3)读取保存的位图发送到客户端并启动定时器
void CMY_UdpIocpSrvDlg::OnStratBroadcast()
{
//响应广播屏幕按钮函数
// TODO: Add your control notification handler code here
GrabScreen(); //获取屏幕位图
SaveBitmapToFile(m_hbmScreen,"C:\\1.bmp"); //保存屏幕位图到本机
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] ... 下一页 >>
C++的多媒体屏幕广播教学系统设计 第20页下载如图片无法显示或论文不完整,请联系qq752018766