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();

    }

  • 相关阅读:
    德信创业系2014版
    [学习笔记]矩形面积并
    第六章 深入分析ClassLoader工作机制
    第五章 深入class文件结构
    设计模式
    第四章 Javac编译原理
    第三章 深入分析Java Web中的中文编码问题
    第2章 深入分析java I/O的工作机制(下)
    linnx常用命令学习
    jenkins学习(1)
  • 原文地址:https://www.cnblogs.com/wqj1212/p/2340861.html
Copyright © 2011-2022 走看看