[轉] C++ CImage實現的全屏PNG截圖


#include <atlimage.h>
#include <atltime.h>
#include <conio.h>

//截取全屏保存為png
CString ScreenShot()
{
    HDC hDCScreen = ::GetDC(NULL);//首先獲取到屏幕的句柄    
    int nBitPerPixel = GetDeviceCaps(hDCScreen, BITSPIXEL);//獲取到每個像素的bit數目
    int nWidthScreen = GetDeviceCaps(hDCScreen, HORZRES);
    int nHeightScreen = GetDeviceCaps(hDCScreen, VERTRES);
    //創建一個CImage的對象
    CImage m_MyImage;
    //Create實例化CImage,使得其內部的畫布大小與屏幕一致
    m_MyImage.Create(nWidthScreen, nHeightScreen, nBitPerPixel);
    //獲取到CImage的 HDC,但是需要手動ReleaseDC操作,下面是MSDN的說明
    //Because only one bitmap can be selected into a device context at a time, 
    //you must call ReleaseDC for each call to GetDC.
    HDC hDCImg = m_MyImage.GetDC();
    //使用bitblt 將屏幕的DC畫布上的內容 拷貝到CImage上
    BitBlt(hDCImg, 0, 0, nWidthScreen, nHeightScreen, hDCScreen, 0, 0, SRCCOPY);

    //保存到的文件名
    CString strFileName("C:\\");
    strFileName += _T("ScreenShot\\");
    CreateDirectory((LPCTSTR)strFileName, NULL);
    CTime t = CTime::GetCurrentTime();
    CString tt = t.Format(_T("%Y-%m-%d_%H-%M-%S"));
    strFileName += tt;
    strFileName += _T(".PNG");

    //直接保存吧
    m_MyImage.Save(strFileName, Gdiplus::ImageFormatPNG);

    //前面調用了GetDC所以需要調用ReleaseDC釋放掉
    //詳情請參見MSDN
    m_MyImage.ReleaseDC();
    return strFileName;
}

void main()
{
    ScreenShot();
    _getch();
}

 

代碼來源: https://blog.csdn.net/sunflover454/article/details/50629063

謝謝分享者 : )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM