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

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

Как я могу подавить это исключение, я попробовал try {}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);
        }

`


person Austine Julisons    schedule 13.04.2017    source источник
comment
Вы пытались обработать событие DispatcherUnhandledException в приложении?   -  person 15ee8f99-57ff-4f92-890c-b56153    schedule 13.04.2017


Ответы (2)


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

Меню Visual Studio Debug -> Exceptions -> снять отметку с конкретного исключения в столбце Thrown.

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

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

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

person Thomas Flinkow    schedule 13.04.2017
comment
Я отредактировал свой вопрос. После проверки поля исключения в этой строке возникает ошибка this.loadedImage.EndInit(); - person Austine Julisons; 13.04.2017

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

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

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

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

E.g

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

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

person Austine Julisons    schedule 14.04.2017