zoukankan      html  css  js  c++  java
  • 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();

    }

  • 相关阅读:
    ZR#330. 【18 提高 3】矿石(容斥)
    牛客NOIP提高组R1 C保护(主席树)
    BZOJ1026: [SCOI2009]windy数(数位dp)
    AtCoderBeginnerContest109题解
    BZOJ3679: 数字之积(数位dp)
    牛客NOIP普及组R1 C括号(dp)
    牛客NOIP提高组R1 A中位数(二分)
    BZOJ1576: [Usaco2009 Jan]安全路经Travel(最短路 并查集)
    ZRDay6A. 萌新拆塔(三进制状压dp)
    Python 入门教程 10 ---- Student Becomes the Teacher
  • 原文地址:https://www.cnblogs.com/wqj1212/p/2340861.html
Copyright © 2011-2022 走看看