zoukankan      html  css  js  c++  java
  • 屏幕截图代码

    //截图

    INT CAnimationHelper::_GetScreenShotData( HWND hWnd, LPRECT rcShot, BYTE ** ppBuf ) {  //截图  HDC hDcWnd = NULL;  if (hWnd)  {   hDcWnd = ::GetDC(hWnd);  }  else  {   HWND hWndDesk = ::GetDesktopWindow();   hDcWnd = ::GetDC(hWndDesk);  }  WORD nBitPerPixel = (WORD)::GetDeviceCaps(hDcWnd, BITSPIXEL);  INT nWidth = rcShot->right-rcShot->left;  INT nHeight = rcShot->bottom-rcShot->top;  INT nOffset = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  DWORD dwSize = nBitPerPixel*nWidth*nHeight + nOffset;  *ppBuf = new BYTE[dwSize];  HDC hDcMem = ::CreateCompatibleDC(hDcWnd);  HBITMAP hBmpMem = ::CreateCompatibleBitmap(hDcWnd, nWidth, nHeight);  HBITMAP hBmpOld = (HBITMAP)::SelectObject(hDcMem, hBmpMem);  ::BitBlt(hDcMem, 0, 0, nWidth, nHeight, hDcWnd, rcShot->left, rcShot->top, SRCCOPY);

     BITMAPINFO bih = {0};  bih.bmiHeader.biBitCount = nBitPerPixel;  bih.bmiHeader.biCompression = BI_RGB;  bih.bmiHeader.biHeight = nHeight;  bih.bmiHeader.biPlanes = 1;  bih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  bih.bmiHeader.biSizeImage = nBitPerPixel*nWidth*nHeight;  bih.bmiHeader.biWidth = nWidth;

     BITMAPFILEHEADER bfh = {0};  bfh.bfOffBits = nOffset;  bfh.bfSize = dwSize;  bfh.bfType = (WORD)0x4d42;

     memcpy(*ppBuf, &bfh, sizeof(BITMAPFILEHEADER));  memcpy((*ppBuf)+sizeof(BITMAPFILEHEADER), &bih.bmiHeader, sizeof(BITMAPINFOHEADER));

     ::GetDIBits(hDcMem, hBmpMem, 0, nHeight, (*ppBuf)+nOffset, &bih, DIB_RGB_COLORS);

     if (nBitPerPixel==32)  {   BYTE *pData = (*ppBuf)+nOffset+3;   for (INT i=0; i<nHeight; i++)   {    for (INT j = 0; j<nWidth; j++)    {     *pData = 0xFF;     pData += 4;    }   }  } 

     //for test //  FILE *fp = _wfopen(L"E:\\a.bmp", L"w+b"); //  fwrite(*ppBuf, 1, dwSize, fp);//写入位图数据 //  fclose(fp);

     ::SelectObject(hDcMem, hBmpOld);  ::DeleteObject(hBmpMem);  ::DeleteObject(hDcMem);  ::ReleaseDC(hWnd,hDcWnd);

     return dwSize; }

  • 相关阅读:
    进程之锁机制, 信号机制, 事件机制
    进程相关内容01
    计算机相关知识
    网络编程------socketserver模块以及socket模块的更多用法.
    网络编程------粘包问题以及切换目录
    简单工厂模式
    SQL LinqToSql Lambda
    检测到有潜在危险的 Request.Form 值
    轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
    最全前端资源汇集
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/2804250.html
Copyright © 2011-2022 走看看