这里给出的加载方法并没有考虑图片文件可能出现的所有情况,只是一个简单的解析过程. 加载后的HBITMAP指向一个32位DIB(这里这样做是为了统一png/jpg/bmp在加载之后的像素处理与显示). 代码如下: FILE* file = _tfopen(s_name, _T("rb")); if (file) { // 填充图像缓冲区 fseek(file, 0, SEEK_END); DWORD size = ftell(file); fseek(file, 0, SEEK_SET); BYTE* data = (BYTE*)ZeroMemory(malloc(size), size); fread(data, 1, size, file); // 将BYTE*转换为HBITMAP BITMAPFILEHEADER* pbmh = (BITMAPFILEHEADER*)data; if (pbmh->bfType == 0x4D42) { BYTE* pbits = data + sizeof(BITMAPFILEHEADER); BITMAPINFO* pbmi = (BITMAPINFO*)pbits; BITMAPINFO bmi = {0}; bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader); bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biSizeImage = pbmi->bmiHeader.biSizeImage; bmi.bmiHeader.biWidth = pbmi->bmiHeader.biWidth; bmi.bmiHeader.biH