Image processing 使用DirectX HLSL像素着色器为照片创建图像效果

Image processing 使用DirectX HLSL像素着色器为照片创建图像效果,image-processing,directx,gdi+,pixel-shader,Image Processing,Directx,Gdi+,Pixel Shader,是否可以使用DirectX像素着色器为照片创建图像效果?我有一个C++应用程序,包括照片数据库管理器的一种。它利用GDI+进行图像处理,我想为用户提供一些奇特的图像效果——我想通过DirectX像素着色器来实现。我希望实现类似的效果,就像Shazzam工具提供的开箱即用的示例库一样——不幸的是,我使用的是纯GDI+而不是WPF 为了在GDI+位图中创建图像效果,我考虑了以下步骤: 1) 通过GDI加载图像+ 2) 初始化DirectX,加载/编译着色器,将GDI+图像转换为DirectX中的纹理

是否可以使用DirectX像素着色器为照片创建图像效果?我有一个C++应用程序,包括照片数据库管理器的一种。它利用GDI+进行图像处理,我想为用户提供一些奇特的图像效果——我想通过DirectX像素着色器来实现。我希望实现类似的效果,就像Shazzam工具提供的开箱即用的示例库一样——不幸的是,我使用的是纯GDI+而不是WPF

为了在GDI+位图中创建图像效果,我考虑了以下步骤:

1) 通过GDI加载图像+

2) 初始化DirectX,加载/编译着色器,将GDI+图像转换为DirectX中的纹理

3) 在DirectX中绘制4个顶点,并将照片用作纹理

4) 应用像素着色器

5) 使用像素着色照片保存曲面

1-4已经解决,但如何实现步骤5

目前,我正在使用以下片段收集修改后的照片:

d3dDevice->GetRenderTarget(0, &surface);

D3DXSaveSurfaceToFile("Test.png", D3DXIFF_PNG, surface, NULL, NULL);

surface->Release();
surface = NULL;
这段代码不符合我的需要,因为它捕获了整个场景,而不仅仅是纹理(=照片)。如何将像素着色照片纹理恢复为原始大小?我想实现与Shazzam工具提供的相同的结果,但没有WPF

提前谢谢你


干杯

我只需创建一个具有适当尺寸的屏幕外渲染目标(渲染到纹理),并将其保存为曲面(就像您已经做的那样)。渲染到可见屏幕空间(听起来你现在正在这么做)绝对是你最可能避免的事情。如果还想显示结果,请渲染渲染纹理。

我只需创建一个具有适当尺寸的屏幕外渲染目标(渲染到纹理),并将其另存为曲面(就像您已经做的那样)。渲染到可见屏幕空间(听起来你现在正在这么做)绝对是你最可能避免的事情。如果还想显示结果,请渲染渲染的纹理。

这是一个老问题,但有一些Direct2D效果可以满足您的需要


这是一个老问题,但有一些Direct2D效果可以满足您的需要


谢谢!现在就像一个魔咒非常感谢。现在就像一个魔咒