opencv录制屏幕



void CMyseltestDlg::OnBnClickedTrans()
{
std::thread th(savevideo);
th.detach();
}
void savevideo()
{
ifwrite=true;
nWidth = GetSystemMetrics(SM_CXSCREEN);//得到屏幕的分辨率的x    
    nHeight = GetSystemMetrics(SM_CYSCREEN);//得到屏幕分辨率的y    
    hDDC = GetDC( GetDesktopWindow() );//得到屏幕的dc    
    hCDC = CreateCompatibleDC(hDDC);//    
  Mat img=gdiScreenCapture(); 
   VideoWriter vw;
   vw.open("d:\\2.avi",CV_FOURCC('M', 'P', '4', '2'),
  25,cvSize(img.cols,img.rows));
   while(ifwrite)
   { 
  img=gdiScreenCapture(); 
  waitKey(25);
  if(!img.data)
return;
  vw<<img;
  imshow("view",img);
   }
   vw.release();
}


void CMyseltestDlg::OnBnClickedstop()
{
ifwrite=false;

}
Mat gdiScreenCapture(){    
     hBitmap =CreateCompatibleBitmap(hDDC,nWidth,nHeight);//得到位图    
    SelectObject(hCDC,hBitmap); //好像总得这么写。             
    BitBlt(hCDC,0,0,nWidth,nHeight,hDDC,0,0,SRCCOPY);    
    Mat dst;
dst.create(cvSize(nWidth,nHeight),CV_8UC4);
GetBitmapBits(hBitmap,nWidth*nHeight*4,dst.data);
    cvtColor(dst,dst,CV_BGRA2BGR);    
return dst;        
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36576377/article/details/78940366
个人分类: 局域网 C++ opencv
上一篇socket传送接收视频
下一篇多线程 线程里使用Client绘图,屏幕录制
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭