在 windows 系统上,windows imaging component(wic)是一个关键的多媒体处理组件,尤其是在处理图片编码、解码和处理方面。wpf(windows presentation foundation)已经很好地封装了 wic 层,使得在 wpf 中使用这些功能变得非常方便。然而,如果你有特殊需求,需要在 wpf 之外通过纯控制台的方式使用 wic 层的逻辑,可以考虑使用 stakx 的 wic 库。但经过探索,发现 wpf 框架仍然是使用 wic 层的最佳封装,即使在控制台应用程序中也可以使用 wpf。
因为我正在探索 WIC 层的各种方法,本文旨在记录一个可用的库,但最终发现 WPF 是最好的封装。无论是否使用 WPF 窗口,只要在 Windows 下,都可以使用 WPF 提供的 WIC 层封装,因为如果你只使用 WIC 层,相当于只是使用 WPF 库封装的方法。
关于 WPF 中封装的底层原理,可以参考 dotnet 读 WPF 源代码笔记,其中 WIC 多媒体图片处理功能是通过 WindowsCodecs.dll 实现的。
在 .NET Framework 中,引用 WPF 不会增加任何额外的输出文件。在 .NET Core 中,除非是独立发布,否则也不会有额外的输出文件。如果是框架依赖发布,额外输出的文件也非常少。因此,使用 WPF 框架几乎没有缺点。与 WPF 框架相比,使用 stakx 的 WIC 库并没有明显的优势。
接下来是关于如何使用 stakx 的 WIC 库的说明。在开始之前,需要通过 NuGet 安装 stakx.WIC 库,这是一个在 GitHub 上完全开源的库,请访问 https://www.php.cn/link/13287c195ee2950c927824118a3a42b3。
或者在你的 csproj 文件中添加以下代码:
这个库的入口是 WICImagingFactory 接口,这是一个 COM 定义的接口,因此可以使用 new 关键字创建,如下面的代码所示:
接口可以使用 new 关键字创建,只要标记了这是 COM 接口即可。
这个库的封装都在 WICImagingFactory 的方法中,各个方法的使用方法请参阅官方 WIC 文档。
以下是一些使用示例:
例如,获取本机安装的图片解码器,可以用来判断本机是否有 HEIF 解码器: