Delphi 将特定图标大小从流加载到TIcon

Delphi 将特定图标大小从流加载到TIcon,delphi,icons,favicon,delphi-xe,glyph,Delphi,Icons,Favicon,Delphi Xe,Glyph,我的应用程序下载并显示特定网站的Favicon。我跟随Bing从流中检测图像格式,但遇到了另一个障碍。假设是实际的图标图像,代码如下所示: var icon : TIcon; begin icon := TIcon.Create; try icon.LoadFromStream( faviconStream ); spFavicon.Glyph.Assign( icon ); finally icon.Free; end; end; sp

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

var
  icon : TIcon;
begin      
  icon := TIcon.Create;
  try
    icon.LoadFromStream( faviconStream );
    spFavicon.Glyph.Assign( icon );
  finally
    icon.Free;
  end;
end;
spFavicon是来自Raize组件的TRzGlyphStatus。它的Glyph属性是TBitmap

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

如何仅将16x16大小加载到TIcon,或从TIcon加载到TBitmap

试验方法:


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

打开.ico文件格式的主要源。你应该能从这件事中找到答案

Graphics.pas中的ReadIcon过程可能有用,但我认为您只需要找到16x16,因为您正在寻找Favicon


如果你想变得非常可爱,你可以将源代码下载到Firefox,看看他们是如何处理Favicon的。

我知道我可以使用icon.SetSize16,16来缩小图标,但效果与加载了原始16x16图像的效果并不完全相同。请检查以下问题:ReadIcon没有出现在界面部分,或者对于这种常见需求似乎没有官方机制。目前,我发现在从流加载之前调用TIcon.SetSize16,16似乎可以奏效。@moodforaday是的,这是最好的方法。我没有意识到ReadIcon的细微差别——今天我学到了一些其他的东西!