好的,这是一个完整的例子:http://nishi.dreamhosters.com/u/so_bmp_v0.zip
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"gdi32.lib")
#pragma comment(lib,"user32.lib")
char buf[1<<22];
int main(int argc, char **argv) {
FILE* f = fopen("winnt.bmp", "rb"); if(f==0) return 1;
fread(buf, 1,sizeof(buf), f);
fclose(f);
BITMAPFILEHEADER& bfh = (BITMAPFILEHEADER&)buf[0];
BITMAPINFO& bi = (BITMAPINFO&)buf[sizeof(BITMAPFILEHEADER)];
BITMAPINFOHEADER& bih = bi.bmiHeader;
char* bitmap = &buf[bfh.bfOffBits];
int WX=1024, WY=512; // window's width/height
int SX=bih.biWidth, SY=bih.biHeight;
HWND win = CreateWindow("STATIC", "Bitmap test", 0x90C0, 0,0, WX,WY, 0,0, GetModuleHandle(0), 0);
MSG msg;
PAINTSTRUCT ps;
HDC DC = GetDC(win); // window's DC
HBITMAP dib = CreateDIBitmap(DC, &bih, CBM_INIT, bitmap, &bi, DIB_RGB_COLORS);
HDC dibDC = CreateCompatibleDC(DC); SelectObject(dibDC, dib);
ShowWindow(win, SW_SHOWNOACTIVATE);
SetFocus(win);
while(GetMessage(&msg,win,0,0)) {
int m = msg.message;
if(m==WM_PAINT) {
DC = BeginPaint(win, &ps);
StretchBlt(DC, 0,0,WX,WY, dibDC,0,0,SX,SY, SRCCOPY);
EndPaint(win, &ps);
} else if((m==WM_KEYDOWN) || (m==WM_SYSKEYDOWN)) {
break;
} else {
DispatchMessage(&msg);
}
}
return 0;
}
相关:(相反的方向)[?:: Gdiplus位图来BYTE阵列(http://stackoverflow.com/questions/3340017/gdiplusbitmap-to字节数组) – jrh 2016-12-15 13:16:15