2013-08-11 3 views
5

Chcę wyświetlić okładkę albumu utworu (dostępnego za pośrednictwem biblioteki taglib-sharp) w ramce graficznej Windows Forms. Problem, na który napotykam, polega na tym, że biblioteka taglib zwraca obraz typu TagLib.IPicture, podczas gdy pole graficzne wymaga obiektu typu System.Drawing.Image.Jak konwertować IPicture na obraz - .NET 4.5 TagLib Sharp

Przeszukałem internet już od wielu godzin, szukając sposobu przekonwertowania z IPicture na Image, ale bez skutku. Najlepszą przewagą jaką posiadam jest: http://msdn.microsoft.com/en-us/library/system.windows.forms.axhost.getpicturefromipicture.aspx, ale nie widziałem jeszcze udanego przykładu, jak to wdrożyć.

Każda pomoc dotycząca konwersji między tymi dwoma typami byłaby bardzo doceniana. Uwaga: W tym przypadku IPicture nie jest analogiczny do IPictureDisp.

Odpowiedz

10

Zrobiłem coś odwrotnego wcześniej - zamieniając istniejący .jpg na IPicture w celu osadzenia w pliku .mp3. Próbowałem tylko odwrócenie tej operacji, a po szczypanie i testowania, wymyślił to:

TagLib.File tagFile = TagLib.File.Create(mp3FilePath); 
MemoryStream ms = new MemoryStream(tagFile.Tag.Pictures[0].Data.Data); 
System.Drawing.Image image = System.Drawing.Image.FromStream(ms); 

Dzięki za pytanie - Już wiem, jak mam zamiar wykorzystać ten sam!

Aktualizacja: Oto inny sposób (.jpg do IPicture które robiłem wcześniej):

tagFile.Tag.Pictures = new TagLib.IPicture[] 
{ 
    new TagLib.Picture(new TagLib.ByteVector((byte[])new System.Drawing.ImageConverter().ConvertTo(System.Drawing.Image.FromFile(jpgFilePath), typeof(byte[])))) 
};