它是 Winapi 的 WIC(Windows 成像组件)和 DirectX 部分吗?

Is it WIC (Windows Imaging Component) and DirectX part of the Winapi?

我很困惑什么是 Winapi 什么不是。

对我来说,微软开发的任何东西都应该赢api,对我来说很有意义。 但是我不确定。

我只能使用 Winapi 加载图像,这是一个作业,我发现 LoadImage 是 GDI 的一部分,我知道 GDI 是 Winapi 的一部分,但它只适用于 BMP,因此有 GDI+,它似乎适用于其他格式。

在我的研究过程中,我发现了其他方法,例如使用 DirectX,因为速度更快, 或 WIC,我理解的是 COM(我猜它代表 COMponent)OLeLoadPicture 和 IShellImageDataFactory 可以帮助我加载 JPG

它们都是 Win32 的一部分吗?

我在论坛上看到 https://www.gamedev.net/forums/topic/385330-does-directx-just-wrap-the-win32-api/ DirectX 不是 win32 的一部分,它与硬件的工作密切相关,如果 win32 已经可以完成工作,那么使用 Directx 就没有意义了. 它还说 DirectX 包装了一些 Win32 功能,但仅用于某些对话框和 window 处理程序,与图像处理无关,有人还说 Win32 使用了一些 DXD9 API。 DirectX 是为 windows 设计的,所以对我来说将它归类为 Winapi 是有意义的。

COM 组件是 Win32 的一部分吗?

我的问题是,你怎么知道什么是 Win32 的一部分,什么不是 Win32 api?

如您所见,面包屑中没有 WinApi 部分 但同样发生在 WIC

但如果您查看 WinApi MSDN 列表 https://docs.microsoft.com/en-us/windows/desktop/apiindex/windows-api-list 您在 API 列表中找到它还声明它称为 Winapi 或 Win32,向下滚动,您将看到列出的 DirectX,Shell 以及 COM 对象

我问这个是因为阅读不同的答案让我很困惑,基于 API 列表我认为 DirectX、COM 和 Shell 是 Wrapped By/Part Of Win32 API.

也因为我想使用 DirectX 以获得更好的图像处理性能,并且我不希望我的教授说... "Oh you did not use Win32 API, you will have to repeat the course",因为我很确定它会发生,并且我不喜欢有人说某事是真的,但事实并非如此,如果发生这种情况,我想有足够的信心来证明我仍在使用 Win32 API.

我认为目前使用 GDI+ 对我来说似乎是更安全的途径,但如果我可以使用 DirectX,我宁愿使用它。

可能您在这里得到的最佳答案归结为回答这个问题:API 是否包含在 Windows OS 中,或者在使用之前必须安装它吗?

Windows 自 Windows XP Service Pack 2(以及关联的 Windows Server 2003 Service Pack 1)以来的每个版本都包含 "DirectX" 作为操作的一部分系统,尽管组成 "DirectX" 的组件随着时间的推移而发生了变化。 Windows 成像组件 (WIC) 自 Windows Vista(以及相关的 Windows Server 2008)以来一直在操作系统中。

See Not So Direct Setup

自 Windows SDK 版本 6 以来,WIC 的 headers 已在 Windows SDK 中。Direct2D 的 headers 已在 Windows SDK 自 Windows SDK 版本 7。DirectX 的所有其余部分已放入 Windows SDK 版本 8。

See Where is the DirectX SDK?

FWIW,GDI+ 很古老,推荐API 肯定是用 Direct2D 和 WIC 代替。 你可以直接将它们用作 COM 接口,也可以使用像 Win2D.

这样的包装器辅助库

至于那个引用的论坛问题,它是对内部架构的很多猜测。基本答案是 DirectX 一直 是一个系统组件,但在过去,Microsoft 通过 DirectX 运行时将其作为一个巨大的补丁发布。事实上,这是一个非常具有侵入性的补丁,必须更新许多不同版本的操作系统。从 Windows XP SP2 开始,它只是操作系统中的另一个系统组件。

As a little historic footnote, WIC was created precisely because GDI+ was a huge security problem back in the early days of Windows XP. Many OS components and Microsoft application now use WIC to do all bitmap loading to centralize the fuzz-testing and security servicing. For example, the old D3DX9 helper library included it's own copy of various bitmap codecs, while D3DX10 and D3DX11 helper libraries just use WIC--as do the more modern replacements.