【问题标题】:Draw Slightly Transparent Blue Rectangle in Native Win32 GDI在本机 Win32 GDI 中绘制略透明的蓝色矩形
【发布时间】:2012-06-13 12:37:29
【问题描述】:

如何在 Native Win32 C++ 中绘制 alpha/透明度值为 0.5(即 50% 透明度)的蓝色矩形?

使用像 RGBA() 这样的宏失败,我不确定如何指定画笔的 alpha 值。

SetDCPenColor(hdc, RGBA(255,255,0,127));
SetDCBrushColor(hdc, RGBA(255,255,0,127));
Rectangle(hdc, 0, 0, width, height);

【问题讨论】:

    标签: c++ winapi gdi


    【解决方案1】:

    我很确定你需要GDI+ 才能这样做,但它应该与 GDI 一起使用:

    //in rendering function
    using namespace Gdiplus;
    Graphics g (hdc);
    SolidBrush brush (Color (127 /*A*/, 0 /*R*/, 0 /*G*/, 255 /*B*/));
    g.FillRectangle (&brush, 0, 0, width, height);
    

    从好的方面来说,GDI+ 虽然没有那么快,但具有更强大的功能和视觉效果,并且是面向对象的,这也意味着您无需担心所有那些 SelectObjectDeleteObject 调用.

    请注意,在初始化/结束程序以使用 GDI+ 时,有几个 extra steps,并且所有内容都在 Gdiplus 命名空间和 -lgdiplus 中。

    如果你真的需要 GDI,我知道的唯一解决方案是 AlphaBlend,这确实是一种比简单地在设备上下文中绘制形状更复杂的方法。开始使用 GDI+ 总是好的,因为它仍在使用中,而且比 GDI 更容易使用。

    【讨论】:

    • 我不认为 GDI+ 不比 GDI 快吗? GDI 是硬件加速的,但 GDI+ 不是这样(根据我的阅读)。
    • @SethCarnegie,我没有深入了解它,但我记得它更快。看着它,你似乎是对的。不过,GDI+ 仍然具有更多功能,并且可以生成更好的图像。如果您真的很担心速度(同时也担心质量),DirectX 是一个非常好的选择。
    • 是的,毫无疑问,GDI+ 可以生成更好的图像并具有更多功能。 +1。
    • 肯定 GDI+ 比 GDI 慢(至少在你可以获得相同结果的地方)。我做了一些测量,结果非常明显。
    【解决方案2】:
    猜你喜欢
    • 2019-03-16
    • 2021-04-10
    • 2016-03-12
    • 2022-08-11
    • 2016-05-25
    • 2011-07-11
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多