gpt4 book ai didi

c# - 每像素 Alpha 混合

转载 作者:行者123 更新时间:2023-11-30 22:02:30 25 4
gpt4 key购买 nike

很长一段时间以来,我一直在尝试完成某种允许 PNG 图像透明的形式。

我在 C# 中工作,我找到了一个不错的项目,它通过每像素 alpha 混合并通过将图像更改为位图并使用 alpha 层仅显示不透明的部分来实现这一点,这是然后使用 UpdateLayeredWindow 更新。

这是项目:http://www.codeproject.com/Articles/1822/Per-Pixel-Alpha-Blend-in-C

我能够实现上述项目的代码,但由于设置了创建参数,表单基本上是不可见的,只显示图像。当我删除创建参数时,不会应用效果。

但我希望能够将其应用到我的表单背景中。对于我的表单,我将表单边框样式设置为无并应用了背景图像。

我如何将此技术应用到我的表单背景并且仍然能够添加不受影响的控件?

最佳答案

您正在使用分层窗口技术来获得具有 alpha 透明度的背景。这样做的缺点是无法看到它上面的控件。那是因为分层窗口只是一个图像。如果将控件放在上面,您仍然会收到它们的事件和消息,但要真正看到它们,您必须在此位图上绘制所有控件并使其与控件状态保持同步.乏味。

虽然没有其他方法可以获得 alpha 形式(至少不是我所知道的好方法)。

如果您只关心表单的 alpha 透明 边框,并且表单的客户端/内部部分是实体的,您应该考虑创建第二个“内容”表单,在构成边框的分层窗口上方,并随分层窗口一起移动。因此,您可以结合两全其美。

这里有一个例子:http://www.codeproject.com/Articles/20758/Alpha-Blended-Windows-Forms .它还讨论了实现此类 2-form-fashion 时的典型陷阱以及如何避免它们。

Afaik、Office 2013 和 VS 2013 以类似的方式执行此操作(尽管使用类似 WPF 的动力绘图),请注意它们的窗口阴影具有的所有不错的错误。

另一个选择,如果可以的话:使用WPF。由于控件绘图完全由您的图形卡渲染,将其渲染到单个图形缓冲区,因此它可以将此类缓冲区转换为分层窗口的位图,从而使其与控件完美地保持同步。虽然我不是 WPF 程序员,但我从来没有这样做过,但我已经看到了这一点,并且打赌有一些很好的评论者提供了指向好的教程的链接。

关于c# - 每像素 Alpha 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26871869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com