天天看點

mfc顯示圖檔

方式一:使用GDI方式

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

    hMemDC 

    hMemDC  =  CreateCompatibleDC (hScrDC);

    bmp.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));

    bmp.GetBitmap( & bmpInfo); 

    SelectObject(hMemDC,bmp);

    BitBlt(hScrDC,0,0,dwWidth,dwHeight,hMemDC,0,0,SRCCOPY);

方式二:直接讀寫FrameBuffer

HINSTANCE hInst = (HINSTANCE)::GetModuleHandle(NULL);

    HRSRC hrc = FindResource((HMODULE)hInst,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP);

    HGLOBAL hGlobal = LoadResource(NULL,hrc);

    dwBufSize = ::SizeofResource(NULL,hrc);

    gbmpBuf = (PBYTE)::LockResource(hGlobal);

    memcpy(gpLCDBuf,gbmpBuf,dwBufSize);

另外一種顯示圖檔方式:

bmi.bmih.biSize = sizeof(bmi.bmih);

    bmi.bmih.biWidth = dwWidth;

    bmi.bmih.biHeight = -dwHeight;

    bmi.bmih.biPlanes = 1;

    bmi.bmih.biBitCount = (BYTE)bmpInfo.bmBitsPixel;

    bmi.bmih.biSizeImage = 0;

    bmi.bmih.biXPelsPerMeter = 0;

    bmi.bmih.biYPelsPerMeter = 0;

    bmi.bmih.biClrUsed = 0;

    bmi.bmih.biClrImportant = 0;

    bmi.bmih.biCompression = BI_BITFIELDS;

    *(DWORD *)(&bmi.rgq[0]) = 0xF800;

    *(DWORD *)(&bmi.rgq[1]) = 0x07E0;

    *(DWORD *)(&bmi.rgq[2]) = 0x001F;

    StretchDIBits (hScrDC, 0, 0, dwWidth, dwHeight, 0, 0, dwWidth, dwHeight,

        gbmpBuf, (PBITMAPINFO)&bmi, DIB_RGB_COLORS, SRCCOPY);

http://www.cnblogs.com/we-hjb/archive/2010/02/09/1666778.html