WPF не поддерживает формат изображения WebP .
Вы можете просто запросить поддерживаемый формат, например PNG, используя fmt=png
вместо fmt=webp
в URL-адресе запроса:
ImageShoe.Source = new BitmapImage(
new Uri("https://i1.adis.ws/i/jpl/jd_083285_a?qlt=80&w=600&h=425&v=1&fmt=png"));
Если вам действительно нужна поддержка WebP, следующие методы загружают образ WebP и сначала преобразуют его в System.Drawing.Bitmap
с помощью оболочки libwebp для библиотеки .NET .,Затем выполняется второе преобразование из System.Drawing.Bitmap
в BitmapImage
:
. Библиотека-обертка доступна через NuGet, но вам также необходимо загрузить обернутую библиотеку libwebp
для нужной платформы, т.е. x86 или x64,как объяснено на домашней странице библиотеки оболочки.
private async Task<BitmapImage> LoadWebP(string url)
{
var httpClient = new HttpClient();
var buffer = await httpClient.GetByteArrayAsync(url);
var decoder = new Imazen.WebP.SimpleDecoder();
var bitmap = decoder.DecodeFromBytes(buffer, buffer.Length);
var bitmapImage = new BitmapImage();
using (var stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream;
bitmapImage.EndInit();
}
return bitmapImage;
}
Я проверил это с
ImageShoe.Source = await LoadWebP(
"https://i1.adis.ws/i/jpl/jd_083285_a?qlt=80&w=600&h=425&v=1&fmt=webp");