【问题标题】:Hardware Accelerated Image Scaling in windows using C++使用 C++ 在 Windows 中硬件加速图像缩放
【发布时间】:2016-02-08 19:16:45
【问题描述】:

我必须缩放位图图像(例如 1280 x 720 到 1920 X 180,反之亦然)。

我在从屏幕捕获视频时使用了这种缩放。基于软件的缩放会消耗大量的 CPU 缩放,而且速度也会变慢。

是否有任何硬件加速 API 或库来执行缩放?

在线程How to use hardware video scalers? 中讨论了一些方法。但没有最终结论。

需要支持:Windows 7 以上

【问题讨论】:

  • 当然有硬件加速 API 来执行缩放 - D3D 可以做到...虽然,如果不提供有关您的应用程序和输入图像的一些细节,这将很难回答。
  • 我正在使用 GDI 和 Direct3d9、direct3d11 的 bitblt API 进行捕获。根据硬件和directx 支持使用三分之一。所以AFAIK它是位图类型的图像。请建议用于缩放图像的 D3D API 或方法。

标签: c++ gpu directx video-capture ms-media-foundation


【解决方案1】:

如果你有一个IDirect3DTexture9要缩放的图像,你可以使用StretchRect

D3D11 中没有等效功能,但是,如果您有要缩放的图像的ID3D11Texture2D,您可以简单地创建所需目标大小的渲染目标,全屏四边形,然后使用一个简单的着色器,只对原始纹理进行采样。生成的渲染目标将是输入的缩放图像。注意:这种全屏四边形方法也适用于 D3D9。

【讨论】:

  • 感谢@MuertoExcobito。但是 AFAIK StretchRect 不是硬件加速的,它使用 cpu 周期。
  • 它是在硬件中完成的......这就是为什么对源/目标资源有如此多的限制。特别是,该文档说“由于软件仿真不支持颜色转换支持,请使用 IDirect3D9::CheckDeviceFormatConversion 来测试硬件是否支持颜色转换。”,这很清楚地表明该操作是由 GPU 执行的。
  • 感谢@MuertoExcobito 的解释。 How to use hardware video scalers? 中提到它是基于软件的。现在我明白我会尝试实现它。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2022-07-13
  • 2016-06-07
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2012-11-05
相关资源
最近更新 更多