Gdiplus 使用 SolidBrush 进行 FillRectangle 的问题

UnnamedOrange 2019-08-02 10:55:30
大概想要这样:


[&](HDC hdc, Graphics& g, int cx, int cy)
{
SolidBrush brush(Color(255, 255, 255, 255));
g.FillRectangle(&brush, rectFill);
}


然而,当这个 Color 的 Alpha 值设为 255 时,检查像素发现位图的 Alpha 通道为 0,并非期望的 255。这导致接下来的 UpdateLayeredWindow 无法达到预期的效果。把 Color 的 Alpha 值换成 1~254 均能使像素点的 Alpha 有对应的值(1~254)。能否用 FillRectangle 让像素点的 Alpha 通道的值最终为 255?
...全文
621 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码丧尸 2022-07-23
  • 打赏
  • 举报
回复 1
时隔多年挖个坟,这是gdi+的一个历史悠久的bug且至今仍未修复。除了楼主的方法,还可以通过用FillPolygon函数画一个有五个点的伪四边形解决(设置一个包含五个点的数组,其中四个点是你要画的四边形的四个顶点,另一个是和这四个点中任意一个相同的点)
cbzjzsb123 2019-09-17
  • 打赏
  • 举报
回复
cbzjzsb123 2019-09-17
  • 打赏
  • 举报
回复
zgl7903 2019-08-09
  • 打赏
  • 举报
回复
分享经验的行为值得表扬
UnnamedOrange 2019-08-04
  • 打赏
  • 举报
回复
找到了一个代替方案,那就是用 LinearGradientBrush 代替 SolidBrush,这样 Fill 出来就有 Alpha 通道了。。。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧