【发布时间】:2019-03-16 16:26:57
【问题描述】:
我正在使用 win32 gdi 本机 api 绘制线条。现在,我想把这条线画成透明的。我已经在颜色中设置了 alpha 通道属性。但是,将 Alpha 通道设置为颜色并不是将线条绘制为透明的。我阅读了有关 Alpha Blend Api 的信息,但无法找到解决方案。
var hdc = g.GdiDeviceContext;
var srcHdc = CreateCompatibleDC(hdc);
var clipRegion = CreateRectRgn(x, y, x + width, y + height);
SelectClipRgn(hdc, clipRegion);
var pen = CreatePen(PenStyle.Solid, LineWidth, (uint)ColorTranslator.ToWin32(colour));
if (pen != IntPtr.Zero)
{
var oldPen = SelectObject(hdc, pen);
Polyline(hdc, points, points.Length);
SelectObject(hdc, oldPen);
DeleteObject(pen);
}
SelectClipRgn(hdc, IntPtr.Zero);
AlphaBlend(hdc, x, y, width, height, srcHdc, x, y, width, height, new BlendFunction(0x00, 0, 0x7f, 0x00));
DeleteObject(clipRegion);
我正在尝试将线画成透明的。
【问题讨论】:
-
“它不工作” 不是问题陈述。解释你期望发生什么,以及观察到的行为。还强烈建议您使用符号常量。正如所写,我们不知道您的 BLENDFUNCTION 应该具有哪些属性。
-
GDI 让人想起过去,它是一个 24bpp 的 api。顶起 GDI+,gdiplus.h 头文件。
-
@lInspectable 我已经修改了问题。 docs.microsoft.com/en-us/windows/desktop/api/wingdi/… 和 docs.microsoft.com/en-us/windows/desktop/api/wingdi/… 是原生 win32 api 和结构。