如何消除“光环”在具有透明背景的图像中
我正在使用 DrawImage() 在具有透明背景的表单上绘制一些图像。那些部分透明的图像会导致“光环”效果。(查看屏幕截图)
防止这种情况发生的最佳方法是什么
alt text http://www.imagechicken.com/uploads/1266798081003158300.png
编辑
这些相同的图标在我的桌面上看起来很棒,所以应该有更好的方法绘制图标。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可能是由双重渲染引起的 - 图标渲染到透明表单上,然后表单渲染在背景上。在图标仅部分透明的任何地方,表单都会失去其所有透明度。
也许您可以对表单进行更改以支持部分透明而不是二进制。
It's probably being caused by double rendering - the icon is rendering onto your transparent form, then the form is rendering over the background. Anyplace where your icon is only partially transparent, the form is losing all of its transparency.
Perhaps there is a change you can make to the form to support partial transparency rather than binary.
源图像是完整的 Alpha 还是具有透明颜色/一位 Alpha 蒙版?一位 Alpha 图像通常采用背景颜色(通常为白色),然后逐渐淡入背景颜色。您的图像看起来与在非白色背景上绘制一位 alpha 图像时所获得的图像完全相同。
如果您使用一位透明度键,您会得到一个“光环”,或者更确切地说,部分透明值与表单背景颜色的混合。因此,“光环”在这种形式中是粉红色的:
因此,不要对完整的 alpha 图像使用位透明度 - 我不太确定如何在 C# 中做到这一点,但在 C 中,您将使用
UpdateLayeredWindow MSDN 我之前制作的,用于指定关闭之间的 alpha 混合-屏幕DC和窗口表面。
有一个使用 C# UpdateLayeredWindow 的示例>在此 MSDN 博客上。
Is the source image full alpha or does it have a transparent colour/one bit alpha mask? It's common for one-bit alpha images to assume a background colour, often white and just fade to that. Your image looks exactly like what you get if you draw a one-bit alpha image on a non-white background.
If you use the one-bit transparency key, you get a 'halo', or rather mixing of the partially transparent values with the forms background color. So the 'halo' is pink in this form:
So don't use on-bit transparency with full alpha images - I'm not quite sure how to do it in C#, but in C you would use
UpdateLayeredWindow
MSDN one I made earlier to specify an alpha blend between an off-screen DC and the window surface.There's a sample of using
UpdateLayeredWindow
from C# on this MSDN blog.