要把屏幕录制下来,最好用什么?
如果是要抓取录制远程的屏幕又应该用什么?
如果是要抓取录制远程的屏幕又应该用什么?
解决方案 »
- 线程里,list 里的迭代器失效了,有办法检测出来吗?程序崩溃了
- ADO连金额数据库,启动时说数据库文件不是一个有效的复合文件。
- 高分求解关于字符串替换的问题!(CString)
- 各位大虾:vc中的函数可以返回一个类吗?
- Rect,CRECT,RECT区别
- 一段程序,编译连结生成EXE执行文件,没错误,没报警,执行的时候饱错,不知道什么问题哦
- 高分,SDK源代码,在线等
- 高手请进,程序开发项目招标!(关于PDF文件)
- VC技术群:9434362 欢迎加入
- 用VC6。0编译,怎么出现找不到XXXX.pch程序?
- 求教:现在我有一堆数据,客户想由它生成若干种图表(直方图,曲线图,饼图),我该用什么控件或技术呢,大家一般如何解决,请指教,谢谢!
- 我觉得这个问题很难啊!请帮我一下
ultravnc.sourceforge.net
还有录制呢,感觉用编码器录制800*600的分辨率,CPU根本转不过来啊。
HANDLE DDBToDIB(CBitmap &bitmap, DWORD dwCompression, CPalette *pPal)
{
BITMAP bm;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
DWORD dwLen;
HANDLE hDIB;
HANDLE handle;
HDC hDC;
HPALETTE hPal;
ASSERT(bitmap.GetSafeHandle());
if(dwCompression==BI_BITFIELDS)
return NULL;
hPal=(HPALETTE)pPal->GetSafeHandle();
if(hPal==NULL)
{
hPal=(HPALETTE)GetStockObject(DEFAULT_PALETTE);
}
bitmap.GetObject(sizeof(bm),(LPSTR)&bm); bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bm.bmWidth;
bi.biHeight=bm.bmHeight;
bi.biPlanes=1;
bi.biBitCount=bm.bmPlanes*bm.bmBitsPixel;
bi.biCompression=dwCompression;
bi.biSizeImage=0;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed=0;
bi.biClrImportant=0; int nColors=(1<<bi.biBitCount);
// if(nColors>256)
// nColors=0;
dwLen=bi.biSize+nColors*sizeof(RGBQUAD);
hDC=GetDC(NULL);
hPal=SelectPalette(hDC,hPal,FALSE);
RealizePalette(hDC); hDIB=GlobalAlloc(GMEM_FIXED,dwLen);
if(!hDIB)
{
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return NULL;
} lpbi=(LPBITMAPINFOHEADER)hDIB;
*lpbi=bi; GetDIBits(hDC,(HBITMAP)bitmap.GetSafeHandle(),0L,(DWORD)bi.biHeight,
(LPBYTE)NULL,(LPBITMAPINFO)lpbi,(DWORD)DIB_RGB_COLORS);
bi=*lpbi;
if(bi.biSizeImage==0)
{
bi.biSizeImage=(((bi.biWidth*bi.biBitCount)+31)&~31)/8*bi.biHeight;
if(dwCompression!=BI_RGB)
{
bi.biSizeImage=(bi.biSizeImage*3)/2;
}
} dwLen+=bi.biSizeImage;
if(handle=GlobalReAlloc(hDIB,dwLen,GMEM_MOVEABLE))
{
hDIB=handle;
}
else
{
GlobalFree(hDIB);
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return NULL;
} lpbi=(LPBITMAPINFOHEADER)hDIB; BOOL bGotBits=GetDIBits(hDC,(HBITMAP)bitmap.GetSafeHandle(),0L,
(DWORD)bi.biHeight,
(LPBYTE)lpbi+(bi.biSize+nColors*sizeof(RGBQUAD)),
(LPBITMAPINFO)lpbi,
(DWORD)DIB_RGB_COLORS); if(!bGotBits)
{
GlobalFree(hDIB);
SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return NULL;
} SelectPalette(hDC,hPal,FALSE);
ReleaseDC(NULL,hDC);
return hDIB;
}BOOL WriteDIB(LPTSTR szFile, HANDLE hDIB)
{
BITMAPFILEHEADER hdr;
LPBITMAPINFOHEADER lpbi;
if(!hDIB)
{
return FALSE;
}
CFile file;
if(!file.Open(szFile,CFile::modeWrite|CFile::modeCreate,NULL))
{
return FALSE;
} lpbi=(LPBITMAPINFOHEADER)hDIB;
int nColors=1<<lpbi->biBitCount; hdr.bfType=((WORD)('M'<<8)|'B');
hdr.bfSize=GlobalSize(hDIB)+sizeof(hdr);
hdr.bfReserved1=0;
hdr.bfReserved2=0;
hdr.bfOffBits=(DWORD)(sizeof(hdr)+lpbi->biSize+nColors*sizeof(RGBQUAD)); file.Write(&hdr,sizeof(hdr));
file.Write(lpbi,GlobalSize(hDIB));
file.Close();
return TRUE;
}
{
CDC dc;
dc.Attach(::GetDC(NULL)); CDC m_dcBKMem;
CBitmap m_bmpBKMem,*m_pOldBKBmp;
m_dcBKMem.CreateCompatibleDC(&dc);
m_bmpBKMem.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); m_pOldBKBmp = m_dcBKMem.SelectObject(&m_bmpBKMem);
m_dcBKMem.BitBlt(0, 0, rect.Width(), rect.Height(), &dc, rect.left, rect.top, SRCCOPY); HANDLE hDib;
CPalette Pal;
hDib=DDBToDIB(m_bmpBKMem,BI_RGB,&Pal);
WriteDIB("text.bmp",hDib);
// DeleteDC(dc.GetSafeHdc());
}void OnTest()
{
int cx = GetSystemMetrics(SM_CXFULLSCREEN);
int cy = GetSystemMetrics(SM_CYFULLSCREEN);
CRect rect(0,0,cx,cy);
// ScreenToClient(&rect);
SaveRectToBmp(rect);
}