从从 Internet 下载的图像创建图标
Create an Icon from an Image downloaded from the Internet
我想使用从 Internet 地址获取的图像,并在我的应用程序中使用它作为一个或多个表单的图标。
我不想将它保存在磁盘上。我试了一下,在绘制位图时出现了一些错误。
到目前为止我有这样的东西:
internal static Icon DownloadImage(string fromUrl)
{
using (System.Net.WebClient webClient = new System.Net.WebClient())
{
using (Stream stream = webClient.OpenRead(fromUrl))
{
return new Icon(stream);
}
}
}
最后一行本来是针对图片优化的,像这样:
return Image.FromStream(stream);
这就是它变得棘手的地方,我不知道如何进一步。
它在当前状态下不起作用,我想这样称呼它:
this.Icon = DownloadImage(url);
谁能帮我解决这个问题?
我正在尝试使用 .svg
图片,但从技术上讲它可以是任何文件格式。
使用 return Image.FromStream(stream);
更安全,因此您可以引用任何图像..
然后
Bitmap myBitmap = DownloadImage(url);
IntPtr Hicon = myBitmap.GetHicon();
Icon newIcon = Icon.FromHandle(Hicon);
this.Icon = newIcon;
DestroyIcon(newIcon.Handle);
您可以使用 Image.FromStream() and cast to Bitmap, so you have the GetHicon() 可用的方法。
如果图像不需要任何特殊处理,则只需 return Icon.FromHandle(),将 return 由 GetHicon()
编辑的值传递给方法。
FromStream(stream, true)
中的 bool 选项指示保留 ICM 信息(如果存在)。如果存在,丢弃它可能会影响图像的颜色定义。
如果图像已经是透明的,图标将保留透明度设置。
记得在窗体关闭时或用另一个替换它之前调用新图标的 Dispose()
方法(销毁句柄)。
注:题中提到了SVG格式。 GDI+ 不支持这种格式,就像 WebP 和其他更新的格式一样。参见:Using Image Encoders and Decoders in Managed GDI+
using System.Drawing;
using System.Net;
internal static Icon GetIconFromWebImage(string fromUrl)
{
using (var client = new WebClient())
using (var stream = client.OpenRead(new Uri(fromUrl)))
using (var img = (Bitmap)Image.FromStream(stream, true)) {
return Icon.FromHandle(img.GetHicon());
}
}
你可以设置:
[Some Form].Icon = DownloadImage([some address]);
我想使用从 Internet 地址获取的图像,并在我的应用程序中使用它作为一个或多个表单的图标。
我不想将它保存在磁盘上。我试了一下,在绘制位图时出现了一些错误。
到目前为止我有这样的东西:
internal static Icon DownloadImage(string fromUrl)
{
using (System.Net.WebClient webClient = new System.Net.WebClient())
{
using (Stream stream = webClient.OpenRead(fromUrl))
{
return new Icon(stream);
}
}
}
最后一行本来是针对图片优化的,像这样:
return Image.FromStream(stream);
这就是它变得棘手的地方,我不知道如何进一步。
它在当前状态下不起作用,我想这样称呼它:
this.Icon = DownloadImage(url);
谁能帮我解决这个问题?
我正在尝试使用 .svg
图片,但从技术上讲它可以是任何文件格式。
使用 return Image.FromStream(stream);
更安全,因此您可以引用任何图像..
然后
Bitmap myBitmap = DownloadImage(url);
IntPtr Hicon = myBitmap.GetHicon();
Icon newIcon = Icon.FromHandle(Hicon);
this.Icon = newIcon;
DestroyIcon(newIcon.Handle);
您可以使用 Image.FromStream() and cast to Bitmap, so you have the GetHicon() 可用的方法。
如果图像不需要任何特殊处理,则只需 return Icon.FromHandle(),将 return 由 GetHicon()
编辑的值传递给方法。
FromStream(stream, true)
中的 bool 选项指示保留 ICM 信息(如果存在)。如果存在,丢弃它可能会影响图像的颜色定义。
如果图像已经是透明的,图标将保留透明度设置。
记得在窗体关闭时或用另一个替换它之前调用新图标的 Dispose()
方法(销毁句柄)。
注:题中提到了SVG格式。 GDI+ 不支持这种格式,就像 WebP 和其他更新的格式一样。参见:Using Image Encoders and Decoders in Managed GDI+
using System.Drawing;
using System.Net;
internal static Icon GetIconFromWebImage(string fromUrl)
{
using (var client = new WebClient())
using (var stream = client.OpenRead(new Uri(fromUrl)))
using (var img = (Bitmap)Image.FromStream(stream, true)) {
return Icon.FromHandle(img.GetHicon());
}
}
你可以设置:
[Some Form].Icon = DownloadImage([some address]);