• j截图Code


     

    void CjietuDlg::copyScreen(CHAR * filename)

    {

        HDC hScrDC, hMemDC;

        int width, height;

     

        //the pointer will save all pixel point's color value

        BYTE *lpBitmapBits = NULL;

     

        //creates a device context for the screen device

        hScrDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);

     

        //get the screen point size

        width = GetDeviceCaps(hScrDC, HORZRES);

        height = GetDeviceCaps(hScrDC, VERTRES);

     

        //creates a memory device context (DC) compatible with the screen device(hScrDC)

        hMemDC = CreateCompatibleDC(hScrDC);

     

        //initialise the struct BITMAPINFO for the bimap infomation

        //in order to use the function CreateDIBSection

        // on wince os, each pixel stored by 24 bits(biBitCount=24)

        //and no compressing(biCompression=0)

        BITMAPINFO RGB24BitsBITMAPINFO;

        ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));

        RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

        RGB24BitsBITMAPINFO.bmiHeader.biWidth = width;

        RGB24BitsBITMAPINFO.bmiHeader.biHeight = height;

        RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;

        RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;

     

        //use the function CreateDIBSection and SelectObject

        //in order to get the bimap pointer : lpBitmapBits

        HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO,

           DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);

        HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);

     

        // copy the screen dc to the memory dc

        BitBlt(hMemDC, 0, 0, width, height,hScrDC, 0, 0, SRCCOPY);

     

        //if you only want to get the every pixel color value,

        //you can begin here and the following part of this function will be unuseful;

        //the following part is in order to write file;

     

        //bimap file header in order to write bmp file

        BITMAPFILEHEADER bmBITMAPFILEHEADER;

        ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));

        bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp

        bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

        bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*3); ///3=(24 / 8)

     

        //write into file

        FILE *mStream = NULL;

        if((mStream = fopen(filename, "wb")))

        {

           //write bitmap file header

           fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);

           //write bitmap info

           fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);

           //write bitmap pixels data

           fwrite(lpBitmapBits, 3*width*height, 1, mStream);

           //close file

           fclose(mStream);

        }

     

        //delete

        DeleteObject(hMemDC);

        DeleteObject(hScrDC);

        DeleteObject(directBmp);

        DeleteObject(previousObject);

    }

     

    void CjietuDlg::OnBnClickedOk()

    {

        // TODO: Add your control notification handler code here

        static int iN=0;

        CString str("");

     

        str.Format(L"%d.bmp",iN);

        char   charTest[512];

        WideCharToMultiByte(CP_ACP,0,str,-1,charTest,512,NULL,NULL);

        copyScreen(charTest);

        iN++;

     

        //OnOK();

    }

  • 相关阅读:
    jquery blockUI插件实现遮罩层
    ckeditor粘入word内容如何默认设置为保留样式
    抓紧时间把c学习一下
    4G时代的解释
    。。。。
    几个常用的VS快捷键
    清除html标记并截取前50个字符
    SQL Server 2005 sp2安装后导入数据出错的处理方法
    自己做的一道机试题
    敏捷合同摘自网络
  • 原文地址:https://www.cnblogs.com/wqj1212/p/2340861.html
Copyright © 2020-2023  润新知