【发布时间】:2019-07-04 20:35:12
【问题描述】:
我不知道什么是 Winapi,什么不是。
对我来说,微软开发的任何东西都应该是 winapi,这对我来说很有意义。 但我不确定。
我必须只使用 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功能但只是用于一些对话框和窗口处理程序,与图像处理无关,有人还说Win32使用了一些DXD9 API。 DirectX 是为 Windows 设计的,因此将其归类为 Winapi 对我来说是有意义的。
COM 组件是 Win32 的一部分吗?
我的问题是,你怎么知道什么是 Win32 api 的一部分,什么不是?
如您所见,面包屑中没有 WinApi 部分 但 WIC 也是如此
但是如果你查看 WinApi MSDN List https://docs.microsoft.com/en-us/windows/desktop/apiindex/windows-api-list 您在 API 列表中发现它还声明它被称为 Winapi 或 Win32,向下滚动,您将看到列出的 DirectX、Shell 和 COM 对象
我问这个是因为阅读不同的答案让我很困惑,基于 API 列表,我认为 DirectX、COM 和 Shell 是由 Win32 API 包装/部分的。
还因为我想使用 DirectX 来获得更好的图像处理性能,而且我不希望我的教授说类似...“哦,你没有使用 Win32 API,你将不得不重复这门课程”,因为我很确定它会发生,而且我不喜欢有人说某件事是真的,而如果它发生了,我想有足够的信心证明我仍在使用 Win32 API。
我认为目前使用 GDI+ 对我来说似乎是更安全的路径,但如果我可以使用 DirectX,我宁愿使用它。
【问题讨论】:
-
只有布置作业的人才能回答这个问题,因为它是主观的。
-
"winapi" 意义不大,也不是官方的东西。 Microsoft 提供的所有 API 都是二进制组件(主要是 .dll)。这些组件已记录在案,并且文档说明(嗯,大多数情况下)它们随附的 Windows 版本。因此,该过程是 1) 确定您想要支持的 Windows 版本,以及 2) 搜索该平台上可用的内容。
-
返回映像,GDI+ 适用于 Windows XP/2000 及以上版本:docs.microsoft.com/en-us/windows/desktop/api/Gdiplusinit/… WIC 适用于 Windows XP SP2 及以上版本docs.microsoft.com/en-us/windows/desktop/api/Wincodec/…
-
Windows Shell 使用 GDI、GDI+、WIC。 COM 只是定义和使用在 Windows 中随处使用的 API 的标准方式。注意 GDI 和 GDI+ 被视为“已弃用”...
-
我建议
winapi(Windows API) 是可通过 Windows SDK 获得的任何东西(包括 Direct2D、WIC 等)。基本上任何可以用 Visual Studio '开箱即用'编译的东西。
标签: c++ winapi directx gdi wic