创建具有给定尺寸的新位图并填充给定颜色
Posted
技术标签:
【中文标题】创建具有给定尺寸的新位图并填充给定颜色【英文标题】: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
参数如何,位图始终为黑色。
【问题讨论】:
【参考方案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 谢谢。我将其添加到我的答案中。以上是关于创建具有给定尺寸的新位图并填充给定颜色的主要内容,如果未能解决你的问题,请参考以下文章