码迷,mamicode.com
首页 > 其他好文 > 详细

从位图数据取得位图句柄

时间:2017-06-27 20:46:06      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:creat   调色板   free   读取   cto   fstream   dib   api   windows   

#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 ;  
      
    // 把文件写入DIB  
    infile.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();  
}  

http://blog.csdn.net/mmc1206x/article/details/8686822

从位图数据取得位图句柄

标签:creat   调色板   free   读取   cto   fstream   dib   api   windows   

原文地址:http://www.cnblogs.com/wainiwann/p/7086853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!