从位图数据取得位图句柄

来源:互联网 发布:2017网络推广文案案例 编辑:程序博客网 时间:2024/04/29 18:30
#include <windows.h>#include <fstream>using namespace std;void main(){ifstream infile("bm.bmp", ios::in | ios::binary);BITMAPFILEHEADER bmpHeader;// 获取文件大小infile.seekg(0, ios::end);long nfilelen = infile.tellg();infile.seekg(0, ios::beg);// 读取文件头infile.read((char*)&bmpHeader, sizeof(bmpHeader));if (bmpHeader.bfType != 0x4d42)return ;// 占用一块内存HGLOBAL hDIB = GlobalAlloc(GMEM_FIXED, nfilelen);if (hDIB == 0)return ;// 把文件写入DIBinfile.read((char*)hDIB, nfilelen - sizeof(BITMAPFILEHEADER));// 锁定内存, 位图信息指向该内存// BITMAPINFO == 位图信息头 + 调色板BITMAPINFO &bmpInfo = *(BITMAPINFO*)GlobalLock(hDIB);// 位图信息头指向该内存// BITMAPINFOHEADER *pInfoHead = (BITMAPINFOHEADER*)hDIB;// 位图信息头大小// int nHeadSize = sizeof(BITMAPINFOHEADER);// 获取颜色数组BYTE *pBmpPixelBuffer=(BYTE *)&bmpInfo + bmpHeader.bfOffBits - sizeof(BITMAPFILEHEADER);HDC hDC = GetDC(NULL);HBITMAP hBitmap;hBitmap=CreateDIBitmap(hDC,(BITMAPINFOHEADER *)&bmpInfo,CBM_INIT,(VOID *)pBmpPixelBuffer,&bmpInfo,DIB_RGB_COLORS);HDC memDC;memDC = CreateCompatibleDC(hDC);SelectObject(memDC, hBitmap);BitBlt(hDC, 0, 0, 500, 500, memDC, 0, 0, SRCCOPY);DeleteDC(memDC);GlobalFree(hDIB);infile.close();}

原创粉丝点击