2

既存の写真を撮影して、アルバムのアートワークとして設定できるようにしたいと考えています。

GetThumbnailAsyncサムネイルを提供GetOutputStreamし、サムネイル出力ストリームを取得するために使用できます。残念ながら書き込めません。

Win8 C# アプリケーションのアイテムにアルバム アートワーク (または任意のサムネイル) を設定するにはどうすればよいですか?

現在の (動作していない) コード。outStream が Access Denied Error でフラッシュされると終了します

    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();
4

2 に答える 2

0

TagLib Sharp を Windows 8 以降のアプリTagLib Sharp Portableと互換性を持たせるこの GitHub プロジェクトについて知りました。まだプレリリース版ですが、NuGet経由でプロジェクトに追加できます。

ただし、現在、含まれているStreamFileAbstractionクラスを使用して 1 つのバグがあります。StackOverflowExceptionタグやアルバム アートの保存時に がスローされることがあります。カスタムFileAbstractionクラスを使用すると、私にとっては魅力のように機能しました。

元の TagLib と同様に使用できます。

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;
    }
}
于 2014-08-15T19:57:22.010 に答える
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();

コードソース

編集:TagLib Sharp Libraryへのリンクを更新

于 2013-04-25T13:03:43.740 に答える