【问题标题】:Loading specific icon size into TIcon from stream将特定图标大小从流加载到 TIcon
【发布时间】:2011-06-03 03:29:26
【问题描述】:

我的应用程序会下载并显示特定网站的网站图标。我按照 Bing 的 solution 从流中检测图像格式,但遇到了另一个障碍。假设一个实际的图标图像,代码如下:

var
  icon : TIcon;
begin      
  icon := TIcon.Create;
  try
    icon.LoadFromStream( faviconStream );
    spFavicon.Glyph.Assign( icon );
  finally
    icon.Free;
  end;
end;

spFavicon 是来自 Raize Components 的 TRzGlyphStatus。它的 Glyph 属性是一个 TBitmap)

现在,这可行,但有时下载的图标包含多个不同大小的图像,例如除了预期的 16x16 之外,还有 32x32。由于某种原因,控件的 Glyph 属性选择了较大的尺寸。

如何仅将 16x16 尺寸加载到 TIcon,或从 TIcon 加载到 TBitmap?

测试图标:http://www.kpfa.org/favicon.ico

编辑时: 如果可能的话,我宁愿避免先将图标保存到文件中。

【问题讨论】:

标签: delphi icons favicon delphi-xe glyph


【解决方案1】:

.ico 文件的文件格式的主要来源是MSDN。你应该能够从中解决。

Graphics.pas 中的ReadIcon 过程可能有用,但我想您只需要找到 16x16,因为您正在寻找网站图标。

如果你想变得非常可爱,你可以下载源代码到 Firefox,看看它们是如何处理网站图标的。

【讨论】:

  • 奇怪的是 ReadIcon 没有出现在 Interface 部分,或者似乎没有针对这种常见需求的“官方”机制。现在我发现在从流加载之前调用 TIcon.SetSize(16, 16) 似乎可以解决问题。
  • @moodforaday 是的,这是最好的方法。我没有意识到 ReadIcon 的特殊细微差别 - 我今天学到了其他东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2017-09-02
  • 2020-05-01
  • 1970-01-01
相关资源
最近更新 更多