Delphi 将特定图标大小从流加载到TIcon
我的应用程序下载并显示特定网站的Favicon。我跟随Bing从流中检测图像格式,但遇到了另一个障碍。假设是实际的图标图像,代码如下所示: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
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的细微差别——今天我学到了一些其他的东西!