2013-04-16 5 views
2

기존 사진을 가져 와서 앨범 사진으로 설정할 수 있기를 바랍니다.Win8 C# 응용 프로그램에서 앨범 아트웍을 설정하려면 어떻게해야합니까?

작은 이미지 출력 스트림을 얻으려면 GetThumbnailAsync을 사용하고 썸네일 이미지는 GetOutputStream을 사용할 수 있습니다. 불행히도 쓰기가 불가능합니다.

어떻게하면 Win8 C# 응용 프로그램의 항목에 앨범 아트웍 (또는 미리보기 이미지)을 설정할 수 있습니까?

현재 (작동하지 않는) 코드. outStream가

FileOpenPicker fileopenpicker = new FileOpenPicker(); 

    fileopenpicker.FileTypeFilter.Add(".jpg"); 
    fileopenpicker.FileTypeFilter.Add(".png"); 

    fileopenpicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;// | PickerLocationId.DocumentsLibrary | PickerLocationId.PicturesLibrary | PickerLocationId.MusicLibrary; 

    var singlefileoperation = await fileopenpicker.PickSingleFileAsync(); 
    var read = await singlefileoperation.OpenAsync(FileAccessMode.Read); 

    StorageFile replay = currentlyPlaying; 
    TimeSpan pos = ME.Position; 
    ME.Stop(); 

    //curren 
    StorageItemThumbnail storageItemThumbnail = await currentlyPlaying.GetThumbnailAsync(ThumbnailMode.SingleItem); 




    IOutputStream inputStreamAt = storageItemThumbnail.GetOutputStreamAt(0); 
    Stream outStream = inputStreamAt.AsStreamForWrite(); 

    var inStreamAt = read.GetInputStreamAt(0); 
    var inStream = inStreamAt.AsStreamForRead(); 
    await inStream.CopyToAsync(outStream); 
    await outStream.FlushAsync(); 
    outStream.Dispose(); 
    inStream.Dispose(); 
    inStreamAt.Dispose(); 
+0

http://stackoverflow.com/questions/12924390/the-uri-given-to-mediacontrol-for-a-music-files-album-art-net – Freelancer

+0

현재 재생중인 트랙의 기존 앨범 아트 워크가 표시됩니다. 앨범 아트 워크를 파일 자체로 설정하지 않습니다. –

+0

일부 코드는 사용하고 계십니까? 또는 특정 오류가 발생하고 있습니까? – Danpe

답변

0

TagLib Sharp 당신이 찾고있는 무엇에 도움이 액세스 거부 오류와 플러시 때 죽는다.

TagLib.File tagFile = TagLib.File.Create(c:/yourpath/yoursong.mp3); 
IPicture newArt = new Picture(c:/yourimagepath/youralbumart.jpg); 
tagFile.Tag.Pictures = new IPicture[1] {newArt}; 
tagFile.Save(); 

Code Source

편집 : 태그 라이브러리 샤프 도서관

+0

내가 찾고있는 것이 절대적으로 아닙니다. 특히, 나는 이것이 TagLib Sharp를 의미하지 않는 Win8 Metro 앱에서 작동 할 필요가 있음을 반복적으로 지적했다. –

+0

아, 제 사과. 나는 그것을 잠시 들여다 보았다. 그 모습에서 TagLib Sharp 소스에있는 코드를 적용하거나 업데이트하는 것이 가장 좋습니다. 보시다시피, 그들은 수동으로 파일 바이너리 스트림에 태그 정보를 직렬화하고 추가해야합니다. 핵심 .NET 라이브러리에이 기능이없는 것처럼 Windows Store API에이 기능이 없다는 사실은 놀랄 일이 아닙니다. TagLib Sharp 소스에 대한 필자의 검색에서 업데이트 된 API에 적응하는 것이 가능해 보입니다. 그러나 프로젝트 일 것입니다. – JHixson

+0

그래, 내가 걸어야 할 길 같아. 나는 유용한 것을 다시 설계 한 후에 다시 대답 할 것이다. –

0

에 업데이트 링크는 그냥 윈도우 8 + 앱 TagLib Sharp Portable와 호환 태그 라이브러리 샤프하게이 GitHub의 프로젝트에 대해 알게되었습니다. 아직 시험판 버전이지만 NuGet을 통해 프로젝트에 추가 할 수 있습니다.

그러나 현재 포함 된 StreamFileAbstraction 클래스를 사용하는 버그가 하나 있습니다. 태그 또는 앨범 아트를 저장할 때 때로는 StackOverflowException을 던집니다. 사용자 정의 FileAbstraction 클래스를 사용하면 매력처럼 저에게 효과적이었습니다.

원래 태그 라이브러리에 비슷한 사용할 수 있습니다 :

StorageFile file = [...] 
TagLib.File tagFile = TagLib.File.Create(new FileAbstraction(file.Name, (await file.OpenAsync(FileAccessMode.ReadWrite)).AsStream())); 

나머지는 JHixson의 대답처럼 유지됩니다.

사용자 정의 FileAbstraction 클래스 :

public class FileAbstraction : TagLib.File.IFileAbstraction 
{ 
    public FileAbstraction(string name, Stream stream) 
    { 
     this.Name = name; 
     this.ReadStream = stream; 
     this.WriteStream = stream; 
    } 

    public void CloseStream(Stream stream) 
    { 
     stream.Flush(); 
    } 

    public string Name 
    { 
     get; 
     private set; 
    } 

    public Stream ReadStream 
    { 
     get; 
     private set; 
    } 

    public Stream WriteStream 
    { 
     get; 
     private set; 
    } 
}