创建具有给定尺寸的新位图并填充给定颜色

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 中当前选择的画笔颜色。 crColorhDCn 中绘制的现有颜色相关。 ExtFloodFill 期望在该坐标 0,0 处找到具有 crColor 的区域 - 提问者可能想要 FillRect @BarmakShemirani 谢谢。我将其添加到我的答案中。

以上是关于创建具有给定尺寸的新位图并填充给定颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android - 用颜色填充位图

在 Android 中动态且顺序地用颜色填充图像视图或位图

带有颜色和居中文本的 UIImage

OpenGL:在背景图像上使用蒙版绘制颜色

在给定年份使用不同颜色的SAS覆盖

无法为 WebView 创建层,尺寸 640x7040 最大尺寸 8192 颜色类型 4 具有上下文 1