Я хочу использовать BitmapImage для отображения этого (http://www.imageview.kro.kr/images/test.avif) в элементе управления изображениями. (Указанный выше адрес является временным адресом, созданным для этого вопроса, а фактический адрес содержит форму avif, webp, png и jpg.)
Но BitmapImage не поддерживает расширение avif и не отображается в элементе управления изображением .
Итак, как мне отобразить расширения avif и webp в элементе управления изображениями?
Ниже приведен код, над которым я работал до сих пор.
Добавить:
Я решил проблему проблема с поддержкой webp. Решено с использованием модуля https://github.com/imazen/libwebp-net и libwebp.dll Но поддержка расширения avif еще не решена.
Ниже приведен код после устранения неполадок, связанных с поддержкой расширения webp.
private static BitmapImage LoadImage(byte[] imageData, string ext) {
if (imageData == null || imageData.Length == 0) return null;
var image = new BitmapImage();
using(var mem = new MemoryStream(imageData)) {
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
if (ext == "webp") {
SimpleDecoder dec = new SimpleDecoder();
dec.DecodeFromBytes(imageData, imageData.Length).Save(mem, System.Drawing.Imaging.ImageFormat.Png);
image.StreamSource = mem;
} else if (ext == "avif") {
//TODO: display avif format image
}
else {
image.StreamSource = mem;
}
image.EndInit();
}
image.Freeze();
return image;
}
using(WebClient wc = new WebClient()) {
Byte[] Mydata = wc.DownloadData("http://www.imageview.kro.kr/images/test.avif");
//The address in this code is a temporary created address,
//but the actual address requires a header request. So I use WebClient.
wc.Dispose();
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate {
thumbnail.Source = LoadImage(Mydata, "avif");
}));
}
WebClient
в выражениеusing
. - person JHBonarius   schedule 14.12.2020