我以前的做法是拍一张就放入文件,发现这样实在太慢,只能每秒拍摄3张,有没有办法把拍摄屏幕放入内存,等比如拍了100张在统一写入文件。
我是新手,请大虾们解释详细点,万分万分感谢。
我是新手,请大虾们解释详细点,万分万分感谢。
解决方案 »
- ★★★★★★MFC 中怎么加入numericUpDown控件呢,在线等. (VC2005) 请大哥大姐指点我★★★★★★
- 已经实现了给基于对话框的程序加启动画面。可是当启动画面显示时,主窗口就已经出来了,这有点影响美观。请问如何让启动画面消失后再出现
- 头疼的事
- 為何我的DIALOG加上RICHEDIT後,編譯執行後,什麼也看不到了.
- 关于ADO的问题
- 继“软件打包”,大家再来讨论一下“操作系统版本影响编程”的问题,UP也有分哈!
- 请问如何把c语言搞成vc?谢谢
- 程序中有只用于2000的函数,在98下不能运行。如何解决?
- 问一条很简单但想不出的题目,在线等待答案:
- 哪里有msdn中文版下载?
- CListCtrl问题!!活见鬼,可能是哪儿一时蒙住了,请大家说说?
- sql server2000个人版/开发版都不能装在XP上?
long CTransparentWnd::screencopy(WPARAM wParam,LPARAM lParam)
{
CString filename;
CDC *pDC;
CString string;
string.Format("%d",lParam);
filename="c:\\result\\"+string+".bmp";
CWindowDC ddc(GetDesktopWindow());
pDC =&ddc;//获取当前整个屏幕DC
int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式
int Width = pDC->GetDeviceCaps(HORZRES);
int Height = pDC->GetDeviceCaps(VERTRES);
CDC memDC;//内存DC
memDC.CreateCompatibleDC(pDC);
CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap
memBitmap.CreateCompatibleBitmap(pDC, Width, Height); oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC
memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC //以下代码保存memDC中的位图到文件
BITMAP bmp;
memBitmap.GetBitmap(&bmp);//获得位图信息
FILE *fp = fopen(filename, "w+b"); BITMAPINFOHEADER bih = {0};//位图信息头
bih.biBitCount = bmp.bmBitsPixel;//每个像素字节大小
bih.biCompression = BI_RGB;
bih.biHeight = bmp.bmHeight;//高度
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//图像数据大小
bih.biWidth = bmp.bmWidth;//宽度
BITMAPFILEHEADER bfh = {0};//位图文件头
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量
bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件总的大小
bfh.bfType = (WORD)0x4d42;
fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头
fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头
byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据 GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p,
(LPBITMAPINFO) &bih, DIB_RGB_COLORS);//获取位图数据 fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//写入位图数据 delete [] p; fclose(fp); memDC.SelectObject(oldmemBitmap); return 0;
}UINT ComputerThreadProc(LPVOID param)
{
int i;
for (i=100;i++;i<200)
{
CTransparentWnd* transwnd = new CTransparentWnd();
transwnd->screencopy(0,i);
delete transwnd;
}
return 0;
}
跪谢
可以使用mirror display driver,见TightVNC.
能举个例子?
1)Poll Screen
2) System Hook
3) Mirror display driverSchema 3) is best and fast.