我想使用從互聯網地址中獲取的影像,并將其作為我的應用程式中一個或多個表格的圖示。 我不想把它保存在磁盤上。我試了一下,在繪制位圖時出現了一些錯誤。
到目前為止,我有這樣的東西:
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影像,但從技術上講,它可以是任何檔案格式。
uj5u.com熱心網友回復:
使用return Image.FromStream(stream);是比較安全的,所以你可以參考任何影像。
那么
Bitmap myBitmap = DownloadImage(url) 。
IntPtr Hicon = myBitmap.GetHicon();
Icon newIcon = Icon.FromHandle(Hicon);
this.Icon = newIcon;
DestroyIcon(newIcon.Handle);
uj5u.com熱心網友回復:
你可以使用Image.FromStream()并投遞到Bitmap,所以你有GetHicon()方法可用。
如果影像不需要任何特殊處理,那么只需回傳Icon.FromHandle(),將GetHicon()回傳的值傳遞給該方法。
FromStream(stream, true)中的bool選項指示保留ICM資訊,如果存在的話。如果它存在的話,丟棄它可能會影響到影像的顏色定義。
如果影像已經是透明的,Icon將保留透明度設定。
記得在表單關閉時或在用另一個Icon替換它之前,呼叫新Icon的Dispose()方法(銷毀句柄)。
注意:在問題中,提到了 SVG 格式。GDI 并不支持這種格式,因為WebP和其他更新的格式。見。在托管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])。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309678.html
標籤:
上一篇:將Devexpress專案從v17.2轉換到21.2(v21.2中不再有DevExpress.ExpressApp.Images.dll)。
