Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3026

Loading bitmap in particular way

$
0
0
I have a function that essentially takes a screen shot and saves a pointer to it as a structure. I would like to use the same structure for bitmaps that I load from files.

Code:

typedef struct _BITMAPCAPTURE {
HBITMAP hbm;
LPDWORD pixels;
INT    width;
INT    height;
} BITMAPCAPTURE;

BOOL CaptureScreen(BITMAPCAPTURE* bmpCapture)
{
BOOL bResult = FALSE;
if(!bmpCapture)
    return bResult;

ZeroMemory(bmpCapture, sizeof(BITMAPCAPTURE));

HDC hdcScreen  = GetDC(NULL);
HDC hdcCapture = CreateCompatibleDC(NULL);
int nWidth    = GetSystemMetrics(SM_CXVIRTUALSCREEN),
    nHeight    = GetSystemMetrics(SM_CYVIRTUALSCREEN);

// Bitmap is stored top down as BGRA,BGRA,BGRA when used as
// DWORDs endianess would change it to ARGB.. windows COLORREF is ABGR
LPBYTE lpCapture;
BITMAPINFO bmiCapture = { {
    sizeof(BITMAPINFOHEADER), nWidth, -nHeight, 1, 32, BI_RGB, 0, 0, 0, 0, 0,
} };

bmpCapture->hbm = CreateDIBSection(hdcScreen, &bmiCapture,
    DIB_RGB_COLORS, (LPVOID *)&lpCapture, NULL, 0);
if(bmpCapture->hbm){
    HBITMAP hbmOld = (HBITMAP)SelectObject(hdcCapture, bmpCapture->hbm);
    BitBlt(hdcCapture, 0, 0, nWidth, nHeight, hdcScreen, 0, 0, SRCCOPY);
    SelectObject(hdcCapture, hbmOld);
    bmpCapture->pixels = (LPDWORD)lpCapture;
    bmpCapture->width  = nWidth;
    bmpCapture->height = nHeight;
    bResult = TRUE;
}

DeleteDC(hdcCapture);
DeleteDC(hdcScreen);
return bResult;
}

The handle to the bitmap, as well as the width and height are all easy enough to get but I'm unsure of how to get the pixels. Thanks very much.

Viewing all articles
Browse latest Browse all 3026

Trending Articles