首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MS Example of GetDIBits会创建一个新的BITMAPINFOHEADER?

为什么MS Example of GetDIBits会创建一个新的BITMAPINFOHEADER?
EN

Stack Overflow用户
提问于 2020-08-07 15:38:42
回答 1查看 63关注 0票数 0

使用GetDIBits here的微软示例必须编写以下代码。我的问题是,为什么他们要创建一个新的bi项,而不是只在调用GetDIBits时使用bmpScreen ?:

代码语言:javascript
复制
    // Get the BITMAP from the HBITMAP
    GetObject(hbmScreen,sizeof(BITMAP),&bmpScreen);
     
    BITMAPFILEHEADER   bmfHeader;    
    BITMAPINFOHEADER   bi;
     
    bi.biSize = sizeof(BITMAPINFOHEADER);    
    bi.biWidth = bmpScreen.bmWidth;    
    bi.biHeight = bmpScreen.bmHeight;  
    bi.biPlanes = 1;    
    bi.biBitCount = 32;    
    bi.biCompression = BI_RGB;    
    bi.biSizeImage = 0;  
    bi.biXPelsPerMeter = 0;    
    bi.biYPelsPerMeter = 0;    
    bi.biClrUsed = 0;    
    bi.biClrImportant = 0;

    DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;

    // Starting with 32-bit Windows, GlobalAlloc and LocalAlloc are implemented as wrapper functions that 
    // call HeapAlloc using a handle to the process's default heap. Therefore, GlobalAlloc and LocalAlloc 
    // have greater overhead than HeapAlloc.
    HANDLE hDIB = GlobalAlloc(GHND,dwBmpSize); 
    char *lpbitmap = (char *)GlobalLock(hDIB);    

    // Gets the "bits" from the bitmap and copies them into a buffer 
    // which is pointed to by lpbitmap.
    GetDIBits(hdcWindow, hbmScreen, 0,
        (UINT)bmpScreen.bmHeight,
        lpbitmap,
        (BITMAPINFO *)&bi, DIB_RGB_COLORS);
EN

回答 1

Stack Overflow用户

发布于 2020-08-07 16:11:15

GetDIBits

如果lpvBits参数是有效指针,则必须初始化BITMAPINFOHEADER结构的前六个成员以指定DIB的大小和格式。扫描线必须在DWORD上对齐,但RLE压缩的位图除外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63297331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档