目前我正在为使用 Direct2D 进行实时图像处理的 Windows 应用商店开发应用程序。它必须支持各种尺寸的图像。我面临的第一个问题是如何处理图像大于支持的最大纹理尺寸的情况。经过一些研究和文档阅读后,我找到了 VirtualSurfaceImageSource 作为解决方案。这个想法是将图像作为 IWICBitmap 加载,然后使用 CreateWICBitmapRenderTarget (据我所知不是硬件加速)创建渲染目标。在一些绘图操作之后,我想通过使 VirtualSurfaceImage 源中的相应区域无效或在 NeedUpdate 回调触发时将结果显示到屏幕上。我认为可以通过创建 ID2D1Bitmap(硬件加速)并使用 CreateWICBitmapRenderTarget 创建的渲染目标和无效区域作为边界调用 CopyFromRenderTarget 来实现,但该方法返回 D2DERR_WRONG_RESOURCE_DOMAIN 结果。使用 IWICBitmap 的另一个原因是应用程序中涉及的算法之一,必须有权访问更新图像的像素。
问题是为什么这个逻辑不起作用?这是使用 Direct2D 实现我的目标的正确方法吗?此外,如果我想在 GPU 上使用大于最大允许纹理大小的图像进行图像处理,那么使用 CreateWICBitmapRenderTarget 创建的渲染目标不是硬件加速的,这是最佳解决方案吗?
先感谢您。
最佳答案
您是正确的,必须在软件中处理大于纹理限制的图像。
但是,要问的问题是每次渲染时是否都需要整个图像。
您可以使用硬件加速来渲染加载到软件目标中的大图像的一部分。
例如,
关于image-processing - 使用 Direct2D 的大图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337760/