【问题标题】:Transparent PNG with alpha channel parts shows with ugly border带有 alpha 通道部分的透明 PNG 显示带有丑陋的边框
【发布时间】: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:

有谁知道如何摆脱边界?

【问题讨论】:

  • 这不是代码问题,而是设计问题。错误的地方。
  • 不这么认为,检查上面的编辑

标签: vb.net image gdi


【解决方案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,但我正在减少损失。只是要在图像中放置一个背景,去掉所有透明部分。
猜你喜欢
  • 2012-09-23
  • 2012-11-05
  • 2011-03-07
  • 2010-12-30
  • 2018-02-11
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多