是否可以使用DirectX像素着色器为照片创建图像效果?我有一个C ++应用程序,其中包括一种照片数据库管理器。它利用GDI +进行图像处理,我想为用户提供一些奇特的图像效果 - 我想通过DirectX像素着色器来做。我想实现类似的效果,例如Shazzam Tool提供开箱即用的示例库 - 不幸的是我使用纯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 Tool相同的结果,但没有WPF ...
提前谢谢!
干杯!
答案 0 :(得分:1)
我只是创建一个具有适当尺寸的屏幕外渲染目标(渲染到纹理)并将其保存为曲面(就像您已经做过的那样)。渲染到可见的屏幕空间(听起来就像你现在正在做的那样)绝对是你最有可能避免的事情。如果您还想显示结果,请渲染渲染的纹理。
答案 1 :(得分:0)
这是一个古老的问题,但是弓箭有Direct2D效果可以满足您的需求。
https://docs.microsoft.com/en-us/windows/win32/direct2d/built-in-effects