You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将WPF的BitmapSource转换为WinUI 3的BitmapSource?

WinUI3中Shell缩略图的转换方案

你当前用WPF兼容的Shell API获取到的BitmapSource无法直接在WinUI3中使用,以下是两种简便的转换方法:

流转换法(简单通用)

把WPF的BitmapSource转成内存流,再加载为WinUI3的BitmapImage:

using System.IO;
using System.Windows.Media.Imaging;
using Microsoft.UI.Xaml.Media.Imaging;

// 你的原有代码获取到的WPF BitmapSource
var wpfBitmap = result;
var winuiBitmap = new BitmapImage();

using (var stream = new MemoryStream())
{
    var encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(wpfBitmap));
    encoder.Save(stream);
    stream.Position = 0;

    winuiBitmap.SetSource(stream.AsRandomAccessStream());
}

// winuiBitmap可直接绑定到WinUI3的Image控件

像素直接复制法(高性能)

如果对性能要求高,直接复制像素数据到WinUI3的WriteableBitmap:

using System.Windows.Media;
using Microsoft.UI.Xaml.Media.Imaging;

var wpfBitmap = result;
var winuiBitmap = new WriteableBitmap(
    (int)wpfBitmap.PixelWidth, 
    (int)wpfBitmap.PixelHeight);

wpfBitmap.CopyPixels(
    new Int32Rect(0, 0, (int)wpfBitmap.PixelWidth, (int)wpfBitmap.PixelHeight),
    winuiBitmap.PixelBuffer,
    winuiBitmap.PixelWidth * 4,
    0);

winuiBitmap.Invalidate();

注意事项

  • 缩略图获取操作建议放在后台线程执行,避免阻塞UI,转换完成后再切换到UI线程赋值。
  • 频繁获取时记得加缓存,减少重复转换和Shell API调用开销。

内容的提问来源于stack exchange,提问作者David Hitchen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:05:26