一般的截图方式都是根据本机屏幕的设置来生成bmp的。(比如32位的生成的也是32位BMP),我应该怎么样作才能把屏幕截为指定位数的bmp.

解决方案 »

  1.   

    HBITMAP CopyScreenToBitmap(LPRECT lpRect) 

        HDC         hScrDC, hMemDC;         // screen DC and memory DC 
        HBITMAP     hBitmap, hOldBitmap;    // handles to deice-dependent bitmaps 
        int         nX, nY, nX2, nY2;       // coordinates of rectangle to grab 
        int         nWidth, nHeight;        // DIB width and height 
        int         xScrn, yScrn;           // screen resolution 
     
        // check for an empty rectangle 
     
        if (IsRectEmpty(lpRect)) 
          return NULL; 
     
        // create a DC for the screen and create 
        // a memory DC compatible to screen DC 
         
        hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); 
        hMemDC = CreateCompatibleDC(hScrDC); 
     
        // get points of rectangle to grab 
     
        nX = lpRect->left; 
        nY = lpRect->top; 
        nX2 = lpRect->right; 
        nY2 = lpRect->bottom; 
     
        // get screen resolution 
     
        xScrn = GetDeviceCaps(hScrDC, HORZRES); 
        yScrn = GetDeviceCaps(hScrDC, VERTRES); 
     
        //make sure bitmap rectangle is visible 
     
        if (nX < 0) 
            nX = 0; 
        if (nY < 0) 
            nY = 0; 
        if (nX2 > xScrn) 
            nX2 = xScrn; 
        if (nY2 > yScrn) 
            nY2 = yScrn; 
     
        nWidth = nX2 - nX; 
        nHeight = nY2 - nY; 
     
        // create a bitmap compatible with the screen DC 
        hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight); 
     
        // select new bitmap into memory DC 
        hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); 
     
        // bitblt screen DC to memory DC 
        BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); 
     
        // select old bitmap back into memory DC and get handle to 
        // bitmap of the screen 
         
        hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); 
     
        // clean up 
     
        DeleteDC(hScrDC); 
        DeleteDC(hMemDC); 
     
        // return handle to the bitmap 
     
        return hBitmap; 
    }
      

  2.   

    这样很容易改造成MFC的!:)