0

我想使用 BitmapImage在图像控件中显示此( http://www.imageview.kro.kr/images/test.avif )图像。(以上地址是为本题创建的临时地址,实际地址包含avif、webp、png、jpg格式。)
但是BitmapImage不支持avif扩展名,不显示在Image Control中。
那么如何在 Image Control 中显示 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");
  }));
}
4

0 回答 0