在C# Windows Forms中显示WebP图片的问题求助
C# 加载WebP图片的可行方案
方案1:利用Windows原生WIC组件(与系统预览逻辑一致)
Windows 10 1809及以上版本已内置WebP的WIC解码器,资源管理器和照片查看器都是基于此实现预览。你可以通过WPF的WebPBitmapDecoder来解码,再转换为Bitmap对象:
using System.Drawing; using System.IO; using System.Windows.Media.Imaging; public static Bitmap LoadWebPWithWIC(string filePath) { var decoder = new WebPBitmapDecoder( new Uri(filePath), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); var frame = decoder.Frames[0]; using var stream = new MemoryStream(); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(frame); encoder.Save(stream); stream.Position = 0; return new Bitmap(stream); }
注意:需要在项目中引用PresentationCore和WindowsBase程序集,适合WPF项目或混合WinForms/WPF的项目。如果是纯WinForms的.NET Framework项目,也可以直接调用WIC的原生COM接口,逻辑和系统完全一致。
方案2:使用SkiaSharp(跨平台,无依赖痛点)
SkiaSharp是Google Skia图形库的.NET绑定,对WebP支持完善,且NuGet包会自动适配不同平台的原生库,不会出现DLL缺失问题:
- 安装NuGet包:
SkiaSharp和对应平台的原生包(比如Windows平台安装SkiaSharp.NativeAssets.Windows) - 解码代码示例:
using SkiaSharp; using System.Drawing; using System.IO; public static Bitmap LoadWebPWithSkia(string filePath) { using var skBitmap = SKBitmap.Decode(filePath); using var skImage = SKImage.FromBitmap(skBitmap); using var data = skImage.Encode(SKEncodedImageFormat.Png, 100); using var stream = new MemoryStream(data.ToArray()); return new Bitmap(stream); }
此方案兼容.NET Framework、.NET Core/.NET 5+,且支持Windows、Linux、macOS跨平台使用。
方案3:修复Imazen.WebP的DLL缺失问题
如果坚持使用Imazen.WebP,可通过以下步骤解决System.DllNotFoundException:
- 除了
Imazen.WebP,安装对应平台的Native包(比如x64平台安装Imazen.WebP.Native.win-x64) - 打开项目中Native包的DLL文件属性,设置“复制到输出目录”为“如果较新则复制”
- 将项目的平台目标设置为具体的x64或x86(避免Any CPU导致的加载异常)
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

