UWP中如何将StorageItemThumbnail转换为RandomAccessStreamReference?
解决UWP中StorageItemThumbnail转RandomAccessStreamReference的问题
嘿,我懂你遇到的这个类型不匹配的麻烦了——你通过GetThumbnailAsync拿到的是StorageItemThumbnail,但MediaItemDisplayProperties.Thumbnail需要的是RandomAccessStreamReference,直接赋值肯定会报错。别慌,这个转换其实很简单,我来帮你把代码改对:
核心解决思路
StorageItemThumbnail本身就实现了IRandomAccessStreamWithContentType接口,而RandomAccessStreamReference刚好提供了CreateFromStream静态方法,能直接把它转换成我们需要的类型。另外记得用using包裹流操作,避免内存泄漏。
修改后的完整代码
var mediaPlaybackItem = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(myVideoFile)); MediaItemDisplayProperties props = mediaPlaybackItem.GetDisplayProperties(); props.Type = Windows.Media.MediaPlaybackType.Video; props.VideoProperties.Title = CurrentVideo.MyVideoFile.DisplayName; // 转换缩略图流并赋值 using (var thumbnailStream = await CurrentVideo.MyVideoFile.GetThumbnailAsync(ThumbnailMode.VideosView)) { if (thumbnailStream != null) { props.Thumbnail = RandomAccessStreamReference.CreateFromStream(thumbnailStream); } } mediaPlaybackItem.ApplyDisplayProperties(props);
额外提醒
- 空值检查不能少:有些视频文件可能没有内嵌缩略图,拿到的
thumbnailStream会是null,直接调用CreateFromStream会触发空引用异常,一定要先判断。 - 缩略图模式可选:如果需要更高清的单张缩略图,可以把
ThumbnailMode.VideosView换成ThumbnailMode.SingleItem,适合详情页展示。 - 流资源要释放:用
using语句自动回收StorageItemThumbnail的资源,这是UWP开发里的最佳实践,能避免不必要的内存占用。
内容的提问来源于stack exchange,提问作者Muhammad Touseef
相关产品推荐
相关产品推荐

