【问题标题】:How do I create a bitmap using the BITMAPV5HEADER header?如何使用 BITMAPV5HEADER 标头创建位图?
【发布时间】:2011-05-26 05:37:28
【问题描述】:

这是我当前的代码,但在转换为 BITMAPINFOHEADER 时会导致错误:

/* Create the bitmap */
BITMAPINFO bmpinfo;
ZeroMemory(&bmpinfo, sizeof(bmpinfo));
BITMAPV5HEADER bmpheader;
ZeroMemory(&bmpheader, sizeof(bmpheader));
bmpheader.bV5Size = sizeof(BITMAPV5HEADER);
bmpheader.bV5Width = width;
bmpheader.bV5Height = height;
bmpheader.bV5Planes = 1;
bmpheader.bV5BitCount = 32;
bmpheader.bV5Compression = BI_BITFIELDS;
bmpheader.bV5SizeImage = width*height*4;
bmpheader.bV5RedMask = 0x00FF0000;
bmpheader.bV5GreenMask = 0x0000FF00;
bmpheader.bV5BlueMask = 0x000000FF;
bmpheader.bV5AlphaMask = 0xFF000000;
bmpheader.bV5CSType = 0x57696e20; // LCS_WINDOWS_COLOR_SPACE
bmpheader.bV5Intent = LCS_GM_BUSINESS;
bmpinfo.bmiHeader = reinterpret_cast<BITMAPINFOHEADER>(bmpheader);
void* converted = NULL;
HDC screen = GetDC(NULL);
HBITMAP result = CreateDIBSection(screen, &bmpinfo, DIB_RGB_COLORS, &converted, NULL, 0);
ReleaseDC(NULL, screen);
// Image data filled here

我怎样才能成功地做到这一点?

【问题讨论】:

    标签: c++ bmp


    【解决方案1】:

    BITMAPINFO 不是一个真正的结构,它只是关于颜色映射如何跟随标题的文档。只需将您的BITMAPV5HEADER 直接传递给 CreateDIBSection:

    HBITMAP result = CreateDIBSection(screen, reinterpret_cast<BITMAPINFO *>(&bmpheader), DIB_RGB_COLORS, &converted, NULL, 0); 
    

    【讨论】:

    • @Mark Ransom:我找到了BITMAPV5HEADER,并考虑将其传递给CreateDIBSection,假设它可以通过查看bV5Size来推断这种结构,但我找不到任何关于它的文档。有链接吗?
    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 2017-01-29
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多