WPF подавляет NotSupportedException: "формат пикселей не поддерживается"

NotSupportedException: не было найдено информации об этом формате пикселей.

Как я могу подавить это исключение, я попробовал catch {}catch (NotSupportedException), но он не перехватывается, приложение каждый раз переходит в режим прерывания.

Я прочитал некоторые вопросы о том, как с этим справиться (когда на диске есть файл изображения), но моя проблема в том, что я генерирую эти изображения с помощью taglib динамически, поэтому изображения на диске хранятся в виде файла. this.loadedImage.EndInit (); `try {TagLib.File f = TagLib.File.Create (ImageUri);

            if (f.Tag.Pictures.Length > 0)
            {
                TagLib.IPicture pic = f.Tag.Pictures[0];
                MemoryStream ms = new MemoryStream(pic.Data.Data);
                ms.Seek(0, SeekOrigin.Begin);                

                this.loadedImage.BeginInit();
                this.loadedImage.CacheOption = BitmapCacheOption.OnLoad;
                this.loadedImage.DownloadCompleted += this.OnDownloadCompleted;
                this.loadedImage.DownloadFailed += this.OnDownloadFailed;
                this.loadedImage.StreamSource = ms;
                this.loadedImage.EndInit();
            }
            else
            {
              // this.loadedImage = null; 
            }
        }
        catch (NotSupportedException el)
        {

          // MessageBox.Show(el.Message);
        }

`

2 ответа

Помимо того, что это обычно плохое поведение, чтобы подавлять исключения без надлежащей обработки (по крайней мере, регистрируя их, например), вам нужно изменить параметры исключений Visual Studio (я предполагаю, что вы используете VS), где вы можете сказать ему, чтобы он прекратил работу с этим конкретным исключение.

Меню Visual Studio Отладка -> Исключения -> снимите флажок с определенного исключения в столбце Брошенный.

РЕДАКТИРОВАТЬ: в более новых версиях VS вы можете найти это здесь: Меню Visual Studio Отладка -> Windows -> Настройки исключений -> снимите флажок с определенного исключения в столбце Брошенный.

РЕДАКТИРОВАТЬ 2: Вы также можете попробовать снять этот флажок, когда VS прерывает исключение: Вы также можете попробовать снять этот флажок, когда VS прерывает исключение

В любом случае ваше приложение должно перехватывать исключение без сбоев, когда вы запускаете его не из Visual Studio.

По этой ссылке "Не найдено ни одного компонента, подходящего для выполнения этой операции".

Есть этот комментарий

Файлы.png с нулевым размером файла приведут к такой же ошибке.

Поэтому перед передачей данных потока памяти в BitmapImage StreamSource необходимо проверить массив byte [], чтобы убедиться, что данные действительно действительны или длина массива байтов больше нуля.

Например

  MemoryStream ms = new MemoryStream(pic.Data.Data);
  if (pic.Data.Data.Length > 0)
 this.loadedImage.EndInit ();

Это пропустит изображения с нулевой длиной, следовательно, исключив исключение.

Другие вопросы по тегам