Image processing 使用Direct2D的大型图像

Image processing 使用Direct2D的大型图像,image-processing,graphics,windows-8,windows-store-apps,direct2d,Image Processing,Graphics,Windows 8,Windows Store Apps,Direct2d,目前我正在为Windows应用商店开发应用程序,该应用程序使用Direct2D进行实时图像处理。它必须支持各种大小的图像。我遇到的第一个问题是如何处理图像大于支持的最大纹理大小的情况。经过一些研究和文档阅读,我找到了VirtualSurfaceImageSource作为解决方案。其想法是将图像加载为IWICBitmap,然后使用CreateWICBitmapRenderTarget创建渲染目标(据我所知,它不是硬件加速的)。在一些绘图操作之后,我希望通过使VirtualSurfaceImage源

目前我正在为Windows应用商店开发应用程序,该应用程序使用Direct2D进行实时图像处理。它必须支持各种大小的图像。我遇到的第一个问题是如何处理图像大于支持的最大纹理大小的情况。经过一些研究和文档阅读,我找到了VirtualSurfaceImageSource作为解决方案。其想法是将图像加载为IWICBitmap,然后使用CreateWICBitmapRenderTarget创建渲染目标(据我所知,它不是硬件加速的)。在一些绘图操作之后,我希望通过使VirtualSurfaceImage源中的相应区域无效或当NeedUpdate回调触发时,将结果显示到屏幕上。我认为可以通过创建ID2D1Bitmap(硬件加速)并调用CopyFromRenderTarget来实现这一点,使用CreateWICBitmapRenderTarget创建的渲染目标和无效区域作为边界,但该方法会返回D2DERR\u Error\u RESOURCE\u DOMAIN。使用IWICBitmap的另一个原因是应用程序中涉及的算法之一,该算法必须具有更新图像像素的权限

问题是为什么这个逻辑不起作用?这是使用Direct2D实现目标的正确方法吗?另外,如果我想在GPU上对大于最大允许纹理大小的图像进行图像处理,则使用CreateWICBitmapRenderTarget创建的渲染目标没有硬件加速,这是最佳解决方案


提前谢谢。

您认为必须在软件中处理大于纹理限制的图像是正确的

但是,要问的问题是,是否每次渲染时都需要整个图像

可以使用硬件加速渲染加载到软件目标中的大图像的一部分

比如说,

  • 使用ID2D1RenderTarget::CreateSharedBitmap生成可由不同资源使用的位图
  • 然后创建ID2D1BitmapRenderTarget并将大位图渲染到该目标中。(确保执行BeginDraw、Clear、DrawBitmap和EndDraw)。位图和渲染目标都可以缓存以供后续调用使用
  • 然后使用ID2D1Bitmap::CopyFromRenderTarget方法将该渲染目标复制到常规ID2D1Bitmap中,该部分将适合纹理内存
  • 最后将其绘制到真实的渲染目标,pRT->DrawBitmap