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

C++ 它是Winapi的WIC(Windows图像组件)和DirectX部分吗?,c++,winapi,directx,gdi,wic,C++,Winapi,Directx,Gdi,Wic,我不知道什么是Winapi,什么不是 对我来说,微软开发的任何东西都应该是winapi,这对我来说是有意义的。 但我不确定 我必须只使用Winapi加载图像,这是一个家庭作业,我发现LoadImage是GDI的一部分,我知道GDI是Winapi的一部分,但它只适用于BMP,所以有GDI+,它似乎适用于其他格式 在我的研究中,我发现了其他方法,比如使用DirectX,因为它速度更快, 或者WIC wich我理解的是COM(我猜它代表组件)OLeLoadPicture和IShellImageData

我不知道什么是Winapi,什么不是

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

我必须只使用Winapi加载图像,这是一个家庭作业,我发现LoadImage是GDI的一部分,我知道GDI是Winapi的一部分,但它只适用于BMP,所以有GDI+,它似乎适用于其他格式

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

它们都是Win32的一部分吗

我在一个论坛上读到,DirectX不是win32的一部分,它与硬件紧密相连,如果win32已经完成了这项工作,那么使用DirectX就没有意义了。 它还说DirectX包装了一些Win32函数,但只是针对一些对话框和窗口处理程序,与图像处理无关,还有人说Win32使用了一些DXD9API。DirectX是为windows设计的,所以对我来说将其归类为Winapi是有意义的

COM组件是Win32的一部分吗

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

如您所见,在面包屑中没有WinApi部分 但WIC也是如此

但如果您查看WinApi MSDN列表 您可以在API列表中找到它,该列表还声明它被称为Winapi或Win32,向下滚动,您将看到其中列出了DirectX、Shell和COM对象

我问这个问题是因为阅读不同的答案让我很困惑,根据API列表,我认为DirectX、COM和Shell是由Win32 API包装的

也是因为我想使用DirectX来提高图像处理性能,我不想让我的教授说。。。“哦,你没有使用Win32 API,你必须重复这门课”,因为我很确定这会发生,我不喜欢有人说某件事是真的,而事实并非如此,如果真的发生了,我想有足够的信心证明我仍然在使用Win32 API


目前,我认为使用GDI+似乎是比较安全的方法,但如果我能使用DirectX,我宁愿使用它。

也许你在这里得到的最佳答案就是回答这个问题:Windows操作系统中是否包含API,或者在使用它之前必须安装它

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

自Windows SDK版本6以来,WIC的头一直在Windows SDK中。自Windows SDK版本7起,Direct2D的标头就一直位于Windows SDK中。DirectX的所有其余部分都已放入Windows SDK版本8中

FWIW、GDI+非常古老,推荐的API肯定是使用Direct2D和WIC。您可以直接将它们用作COM接口,也可以使用类似的包装器帮助程序库

至于提到的论坛问题,关于内部架构有很多猜测。基本答案是DirectX一直是一个系统组件,但在过去,微软通过DirectX运行时将其作为一个巨大的补丁提供。事实上,这是一个入侵性很强的补丁,必须更新许多不同版本的操作系统。从WindowsXPSP2开始,它只是操作系统中的另一个系统组件

作为一个历史性的小脚注,WIC的创建正是因为GDI+在Windows XP早期是一个巨大的安全问题。许多操作系统组件和Microsoft应用程序现在使用WIC来执行所有位图加载,以集中模糊测试和安全服务。例如,旧的D3DX9帮助程序库包含了它自己的各种位图编解码器的副本,而D3DX10和D3DX11帮助程序库只使用WIC——还有更多


只有布置作业的人才能回答这个问题,因为这是主观的。“winapi”没有多大意义,也不是官方的东西。Microsoft提供的所有API都是二进制组件(.dll)。这些组件都有文档记录,文档说明(大多数情况下)它们附带的Windows版本。因此,过程是1)确定要支持的Windows版本,2)搜索该平台上的可用版本。回到imaging,GDI+适用于Windows XP/2000及以上版本:WIC适用于Windows XP SP2及以上版本Windows Shell使用GDI、GDI+、WIC。COM只是定义和使用在Windows中随处可见的API的标准方式。注:GDI和GDI+被认为是“不推荐的”…我建议
winapi
(Windows API)是通过Windows SDK提供的任何东西(包括Direct2D、WIC等)。基本上,任何可以用VisualStudio“开箱即用”编译的东西。