我跟法师源打在WPF和尝试这个简单的测试,看看能不能买到什么幸运:为什么从服务器加载图像的简单代码不起作用?
var test = new BitmapImage(new Uri("https://thenotebook.org/sites/default/files/fallCartoon.jpg"));
看着调试窗口中测试时
,它的所有属性都设置为null,因此它似乎没有加载图像。为什么?
我跟法师源打在WPF和尝试这个简单的测试,看看能不能买到什么幸运:为什么从服务器加载图像的简单代码不起作用?
var test = new BitmapImage(new Uri("https://thenotebook.org/sites/default/files/fallCartoon.jpg"));
看着调试窗口中测试时
,它的所有属性都设置为null,因此它似乎没有加载图像。为什么?
BitmapImage异步加载网络数据。这意味着它在后台开始下载时立即返回。所以你的代码可能没有问题。检查IsDownloading
属性。订阅DownloadCompleted
和DownloadFailed
事件。根据我们的意见
同步版本:
var bytes = new WebClient().DownloadData("https://thenotebook.org/sites/default/files/fallCartoon.jpg");
var test = new BitmapImage();
test.BeginInit();
test.StreamSource = new MemoryStream(bytes);
test.EndInit();
Console.WriteLine(test.PixelWidth);
Console.WriteLine(test.PixelHeight);
继fejesjoco的建议是:
public static BitmapImage ImageFromUriSync(string uri)
{
using(var client = new WebClient())
{
byte[] data = client.DownloadData(uri);
using(var stream = new MemoryStream(data))
{
var img = new BitmapImage();
img.BeginInit();
img.CacheOption = BitmapCacheOption.OnLoad;
img.StreamSource = stream;
img.EndInit();
return img;
}
}
}
你能在同一个URI你的浏览器打开该影像?如果单独创建URI然后将其馈送到Bitmap会发生什么? –
是的,我可以。我这样做是为了确保它是一个有效的uri。 – mans