【问题标题】:Creating a new bitmap with given dimensions filled with given color创建具有给定尺寸的新位图并填充给定颜色
【发布时间】:2018-11-06 16:23:12
【问题描述】:

我正在使用 Win32 API 创建一个程序,我需要创建一个新的位图,用一种颜色和给定的尺寸填充。

这是我的代码:

m_hBitmap =( HBITMAP ) CreateCompatibleBitmap(hDC, iWidth, iHeight);

HDC hDCn = CreateCompatibleDC( hDC );
SelectObject( hDCn, m_hBitmap );

ExtFloodFill(hDCn, 0, 0, crColor, FLOODFILLSURFACE);

DeleteDC( hDCn );

位图尺寸匹配,但无论crColor 参数如何,位图始终为黑色。

【问题讨论】:

    标签: c++ winapi bitmap


    【解决方案1】:

    使用FillRect() 代替ExtFloodFill()。

    另外,删除DC前需要取消选择位图,否则CreateCompatibleDC()创建并选择到DC中的原始位图会泄露。

    试试这个:

    m_hBitmap = CreateCompatibleBitmap(hDC, iWidth, iHeight);
    
    HDC hDCn = CreateCompatibleDC(hDC);
    HBITMAP hOld = (HBITMAP) SelectObject(hDCn, m_hBitmap); // <-- SAVE OLD BITMAP! 
    
    //ExtFloodFill(hDCn, 0, 0, crColor, FLOODFILLSURFACE);
    RECT r;
    r.left = r.top = 0;
    r.right = iWidth;
    r.bottom = iHeight;
    HBRUSH hBrush = CreateSolidBrush(crColor);
    FillRect(hDCn, &r, hBrush);
    DeleteObject(hBrush);
    
    SelectObject(hDCn, hOld); // <-- RESTORE OLD BITMAP
    DeleteDC(hDCn);
    

    【讨论】:

    • 位图显示后还是黑的
    • 另外ExtFloodFill的用法是错误的。 ExtFloodFill 使用hDCn 中当前选择的画笔颜色。 crColor 与 hDCn 中绘制的现有颜色相关。 ExtFloodFill 期望在该坐标 {0,0} 处找到具有 crColor 的区域 - 提问者可能想要 FillRect
    • @BarmakShemirani 谢谢。我将其添加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2022-01-02
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多