Изменение и сохранение Taglib PictureType - PullRequest
0 голосов
/ 14 марта 2020

У меня есть библиотека MP3, и каждый mp3 имеет встроенные обложки. Я хотел бы отредактировать PictureType, чтобы удостовериться, что правильное изображение выделено для правой обложки. Таким образом, идея состоит в том, чтобы показать скрытые изображения в форме с полем со списком под ним, чтобы отобразить текущий тип и иметь возможность изменять его и сохранять. Мне не удалось создать наглядные коробки на лету, поэтому я пошел сложным путем, чтобы поместить 8 графических блоков в форму и заполнить их соответствующим образом. Вот код для отображения изображений и комбинированных списков:

   using (TagLib.File fill = TagLib.File.Create(path))
        {
            ImageList Ilist = new ImageList();
            for (int i = 0; i < count_artwork; i++)
            {
                MemoryStream ms = new MemoryStream(fill.Tag.Pictures[i].Data.Data);
                System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
                ms.Close();
                ms.Dispose();
                Ilist.Images.Add(Convert.ToString(fill.Tag.Pictures[i].Type), image);
                ptype = fill.Tag.Pictures[i].Type;

                string[] mediaType = new string[] { "FrontCover", "BackCover", "Media", "Artist", "Band", "Illustration" };


                switch (i)
                {
                    case 0:
                        pictureBox1.Image = image;
                        comboBox1.Visible = true;
                        button3.Visible = true;
                        comboBox1.DataSource = mediaType;
                        comboBox1.SelectedItem = Convert.ToString(ptype);
                        break;
                    case 1:
                        pictureBox2.Image = image;
                        comboBox2.Visible = true;
                        button4.Visible = true;
                        comboBox2.DataSource = mediaType;
                        comboBox2.SelectedItem = Convert.ToString(ptype);
                        break;

Это продолжается 8 раз

Хотя это не эффективно, это работает до сих пор.

Тогда я измените значение в выпадающем списке и нажмите кнопку сохранения, которая запускает следующую функцию:

private void SaveType(ComboBox cont, int i)
    {
        using (TagLib.File fill = TagLib.File.Create(label1.Text))
        {
       //     TagLib.File fill = new TagLib.Mpeg.AudioFile(label1.Text);
           TagLib.PictureType ptype = new PictureType();
            switch (cont.SelectedIndex)
            {
                case 0:
                    ptype = PictureType.FrontCover;
                    break;
                case 1:
                    ptype = PictureType.BackCover;
                    break;
                case 2:
                    ptype = PictureType.Media;
                    break;
                case 3:
                    ptype = PictureType.Artist;
                    break;
                case 4:
                    ptype = PictureType.Band;
                    break;
                case 5:
                    ptype = PictureType.Illustration;
                    break;
            }
            fill.Tag.Pictures[i].Type = ptype;
            fill.Save();
         //   fill.Dispose();
        }
    }

Здесь у меня есть 2 вопроса:

  • Есть ли более элегантный способ установить значение ptype без переключателя?
  • Почему сохранение не работает каждый раз, иногда, когда я отлаживаю и go строка за строкой, сохранение работает, но без режима отладки оно не сохраняет файл ! (Я только что заметил, что у меня есть исключение: «Исключение:« System.ArgumentException »в mscorlib.dll»

Заранее спасибо

...