我依靠单击按钮来更改StorageFile
的缩略图。 (这是一个音乐文件。)
而且我想通过从本地选择图像文件来实现。
private async void ChangeAlbumArtButton_Click(object sender, RoutedEventArgs e)
{
var music_file = await CurrentMusic.GetStorageFileAsync();
using (var dst = await music_file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.MusicView, 1024))
{
if (!dst.CanWrite)
{
MainPage.Instance.ShowNotification(Helper.LocalizeMessage("UnableToChangeAlbumArt"));
return;
}
FileOpenPicker picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.PicturesLibrary
};
foreach (var item in new string[] { ".jpg", ".png", ".jpeg" })
picker.FileTypeFilter.Add(item);
var file = await picker.PickSingleFileAsync();
if (file == null) return;
using (var src_stream = await file.OpenReadAsync())
{
await dst.WriteAsync(await FileIO.ReadBufferAsync(file));
var src = new BitmapImage();
src.SetSource(src_stream);
AlbumArt.Source = src;
}
}
}
但是,dst.CanWrite
为假。如何更改缩略图?
如果您打算更改文件的缩略图,则这不是通过代码写入流的方法。
缩略图的提供者是打开文件的默认应用程序。例如,打开音乐文件的默认应用程序是Groove Music
,并且您看到的缩略图由Groove Music
提供。
如果您打算修改音乐文件的缩略图,
首先,您可以参考此document设置文件关联协议,将音乐文件添加到关联列表,并提供图像文件。
然后将您的应用设置为用于打开音乐文件的默认应用。
如果您不打算建立文件类型关联。有一种简单的方法,您可以使用图像文件而不是GetThumbnailAsync()
方法,这意味着不要获取缩略图,而是直接在UI上显示所选图像。
最诚挚的问候。