带有 alpha 通道部分的透明 PNG 显示带有丑陋的边框

Posted

技术标签:

【中文标题】带有 alpha 通道部分的透明 PNG 显示带有丑陋的边框【英文标题】:Transparent PNG with alpha channel parts shows with ugly border 【发布时间】:2013-08-08 10:10:24 【问题描述】:

也许有人可以提供帮助,我正在尝试以一种形式显示一个透明的 PNG 作为启动屏幕。表格上的代码是:

Sub Form_Paint(ByVal s As Object, ByVal e As PaintEventArgs) Handles Me.Paint
  Dim r As New Rectangle(0, 0, 728, 462)
  Dim newBitmap As Bitmap
  newBitmap = Bitmap.FromFile("Logo.png")
  e.Graphics.DrawImage(newBitmap, r)
end sub

生成的图像带有难看的“羽毛”边框。见这里:

图像是 32 位 ARGB,边缘已被赋予透明度。这是嵌入网页中的 PNG:

有谁知道如何摆脱边界?

【问题讨论】:

这不是代码问题,而是设计问题。错误的地方。 不这么认为,检查上面的编辑 【参考方案1】:

试试这个:

e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

另见: How to draw smooth images with C#?

无论如何,正如另一位用户指出的那样,问题在于创建的图像没有任何抗锯齿。上面的 sn-p 会缓解这个问题,但最好的选择是调整图像。

问候

【讨论】:

感谢您的建议,但我不认为这是图像,请参阅上面的编辑以了解嵌入网页时的外观。 sn-p 也没有区别。 我一直在查看 MSDN,问题出在 Image Class(Bitmap 的基类)上。我在这里link 找到以下内容:Image 类不支持位图中的 Alpha 透明度。要启用 Alpha 透明度,请使用每像素 32 位的 PNG 图像。 你能调试 bmp.PixelFormat 吗? 我尝试了 SetStyle(ControlStyles.SupportsTransparentBackColor, True),然后使背景透明,但它只是将背景显示为纯米色。我可以通过将透明度键设置为“systemcolors.control”来摆脱米色,但它仍然有边框。 感谢您的帮助 dna2,但我正在减少损失。只是要在图像中放置一个背景,去掉所有透明部分。

以上是关于带有 alpha 通道部分的透明 PNG 显示带有丑陋的边框的主要内容,如果未能解决你的问题,请参考以下文章

使用 FPDF (PHP) 插入带有 alpha 通道的 PNG

python 生成带有alpha 通道的视频

python 生成带有alpha 通道的视频

python 生成带有alpha 通道的视频

如何使背景PNG图像Alpha通道在QMainWindow中显示为透明

在 Win32 中显示带 alpha 通道的 32 位图像