У меня есть библиотека 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»
Заранее спасибо