【问题标题】:Delphi: 32-bit image does not display correctly on Glass FormDelphi:32 位图像无法在 Glass Form 上正确显示
【发布时间】:2011-10-09 22:12:49
【问题描述】:

我在 TImage 中有一个 PNG(32 位)图像。表单有一个玻璃框架。图片的背景是黑色的,不透明。如何解决?

德尔福 2010。

谢谢。

【问题讨论】:

  • 你确定你的png图片的背景是透明的吗?
  • 当然 :) 在非玻璃形式上它甚至是透明的。
  • 有趣。我只是在这里做了同样的事情,将 TImage 放在设置为 SheetOfGlass 的表单上,添加了一个具有透明背景的 32 位 PNG(由 Fireworks 生成),效果很好。您是否尝试过另一张图片,看看您正在使用的图片是否有问题?
  • 可能是因为第三方组件 - Alpha Controls... 而我有 Jedi。

标签: image delphi frame aero-glass


【解决方案1】:

作为解决方法,您可以将 png 图像的位数更改为 32。

检查此示例

左图是 8 位的 PNG,另一张是 32 位的。

【讨论】:

  • 我也是这么想的!我尝试在 Photoshop CS5 中更改位,但它仅以 4 种格式保存,而不是 PNG。如何制作 32 位?
  • 32 位图片没有帮助(我已在 Paint.net 中转换)。还是黑色的。你还做什么?
  • 我从来没有遇到过 32 bpp png 图像的问题,也许你做错了什么尝试在imgur.com 之类的网站上上传有问题的图像(也可以在你的 TImage 组件中检查这个图像@987654322 @)
  • 相同,即使是您的图像。我看到你的图像是 32 位的。我有 Delphi 2010。
  • 这很奇怪。您是否正在修改 TImage 的某些属性?你是在运行时还是在设计时加载图像?
【解决方案2】:

您应该忘记 TImage,因为它不能正确处理 blit。您需要使用 GDI+ 在表单上手动绘制图像。那只是因为“玻璃”。如果您将其保留在 TImage (或实际上显示在其中的 TGraphic !),“背景”(玻璃)将被复制到内存中,然后将组成一个透明的图形(png?),并将其传送回来他形成。不幸的是,“背景”(玻璃)在你把它弄回来时会变成黑色。

所以,使用 GDI+(google it)和使用 bitmap.handle 的 blt。确保位图是透明的(即 32 位和适当的属性集)。

顺便说一句,玻璃上的字体也是如此。您必须自己绘制东西(也许来自自定义组件?)。不过,您可以找到一些已经执行此操作的组件...例如 http://development.mwcs.de/glowlabel.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 2020-01-07
    • 2015-09-02
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多