1

是否可以使用 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 Tool 提供的相同的结果,但没有 WPF ......

先感谢您!

干杯!

4

2 回答 2

1

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

于 2012-08-16T13:26:23.997 回答
0

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

https://docs.microsoft.com/en-us/windows/win32/direct2d/built-in-effects

于 2020-06-30T21:15:14.863 回答