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

在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缺失问题:

  1. 安装NuGet包:SkiaSharp 和对应平台的原生包(比如Windows平台安装SkiaSharp.NativeAssets.Windows)
  2. 解码代码示例:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:49:10