【问题标题】:C# BitmapFrame.Thumbnail property is null for some imagesC# BitmapFrame.Thumbnail 属性对于某些图像为空
【发布时间】:2018-08-09 03:41:14
【问题描述】:

我正在尝试修改此project 以在目录中显示图像。但问题是该代码不适用于所有图像,例如this one。所以问题是

BitmapFrame bitmapFrame = BitmapFrame.Create(new Uri(path))

Here 存储库上的BitmapFrame.Thumbnail 属性对于某些图像为空。我没有发现这些图片有什么问题。

如何使它适用于所有图像?

工作示例 不工作的例子

【问题讨论】:

    标签: c# wpf bitmapframe


    【解决方案1】:

    我在 SDK 示例中遇到了同样的问题。一些 jpg 显示为一个小的白色矩形,而不是缩略图。也许这是 JPG 格式不受支持的结果,或者 JPG 的标头中不包含 EXIF 信息?我不确定..我可以用 Raviraj 提供的程序解决它。

    但是,Raviray 提供的答案有点短。只有当函数的结果被传递到图像类的 BitmapFrame 构造函数时,缩略图才有效。 BitmapFrame 类有一个带有两个参数的构造函数,第二个是缩略图位图,参见How to override(use) BitmapFrame.Thumbnail property in WPF C#?

    我让它与“坏”的 jpg 一起工作,在 SDK 示例中更改 Photo.cs,如下所示..

        private BitmapSource CreateBitmapSource(Uri path)
        {
            BitmapImage bmpImage = new BitmapImage();
            bmpImage.BeginInit();
            bmpImage.UriSource = path;
            bmpImage.EndInit();
            return bmpImage;
        }
    
        private BitmapSource CreateThumbnail(Uri path)
        {
            BitmapImage bmpImage = new BitmapImage();
            bmpImage.BeginInit();
            bmpImage.UriSource = path;
            bmpImage.DecodePixelWidth = 120;
            bmpImage.EndInit();
            return bmpImage;
        }
    
        // it has to be plugged in here,
        public Photo(string path)
        {
            Source = path;
            _source = new Uri(path);
            // replaced.. Image = BitmapFrame.Create(_source);
            // with this:
            Image = BitmapFrame.Create(CreateBitmapSource(_source),CreateThumbnail(_source));
            Metadata = new ExifMetadata(_source);
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用以下方法为没有缩略图的图像创建缩略图。

      private BitmapSource CreateThumbnail(string path)
      {
          BitmapImage bmpImage = new BitmapImage();
          bmpImage.BeginInit();
          bmpImage.UriSource = new Uri(path);
          bmpImage.DecodePixelWidth = 120;
          // bmpImage.DecodePixelHeight = 120; // alternatively, but not both
          bmpImage.EndInit();
          return bmpImage;
      }
      

      【讨论】:

      • 感谢 sn-p,我投了赞成票。我为 BitmapFrame(问题)解决了这个问题并让它工作,请参阅下面的答案。
      猜你喜欢
      • 2012-05-07
      • 2020-01-01
      • 2017-09-08
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2016-02-15
      相关资源
      最近更新 更多