La mia applicazione elenca tutti gli MP3 in una directory e quando l'utente seleziona un file carica le informazioni del tag, inclusa la copertina dell'album. L'arte viene caricata in una variabile da utilizzare quando l'utente salva i dati. L'arte è anche caricata in una cornice per l'utente da vedere.Caricamento Album art con TagLib sharp e quindi salvarlo sullo stesso file/diverso in C# causa errore di memoria
// Global to all methods
System.Drawing.Image currentImage = null;
// In method onclick of the listbox showing all mp3's
TagLib.File f = new TagLib.Mpeg.AudioFile(file);
if (f.Tag.Pictures.Length > 0)
{
TagLib.IPicture pic = f.Tag.Pictures[0];
MemoryStream ms = new MemoryStream(pic.Data.Data);
if (ms != null && ms.Length > 4096)
{
currentImage = System.Drawing.Image.FromStream(ms);
// Load thumbnail into PictureBox
AlbumArt.Image = currentImage.GetThumbnailImage(100,100, null, System.IntPtr.Zero);
}
ms.Close();
}
// Method to save album art
TagLib.Picture pic = new TagLib.Picture();
pic.Type = TagLib.PictureType.FrontCover;
pic.MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg;
pic.Description = "Cover";
MemoryStream ms = new MemoryStream();
currentImage.Save(ms, ImageFormat.Jpeg); // <-- Error occurs on this line
ms.Position = 0;
pic.Data = TagLib.ByteVector.FromStream(ms);
f.Tag.Pictures = new TagLib.IPicture[1] { pic };
f.save();
ms.Close();
Se carico l'immagine e cercare di salvarla subito ho questa "Tentativo di lettura o scrittura della memoria protetta. Ciò è spesso un'indicazione che l'altra memoria è danneggiata." Se provo a salvare currentImage come ImageFormat.Bmp ottengo questo "Si è verificato un errore generico in GDI +".
Il mio salvare metodo funziona correttamente se carico un'immagine da un URL simile a questo:
WebRequest req = WebRequest.Create(urlToImg);
WebResponse response = req.GetResponse();
Stream stream = response.GetResponseStream();
currentImage = Image.FromStream(stream);
stream.Close();
Così sto indovinando c'è un problema con il modo in cui sto caricando l'immagine nel currentImage quando l'utente seleziona un MP3 dalla lista.
Ho trovato molti esempi di caricamento e salvataggio di immagini su mp3 ma nessuno sembra avere questo problema quando provano a salvarlo subito dopo averlo caricato.
Grazie per il punto nella giusta direzione. Ho pubblicato i miei risultati in un'altra risposta da quando ho postato del codice. – Ovin08
--------- Saluti –