2012-08-16 56 views
1

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

对于在GDI +位图我认为以下步骤创建的图像效果:

1)经由GDI负载图像+

2)初始化的DirectX,负载/编译的着色器,转换GDI +图像将被用作纹理在DirectX

3)画出4个顶点中的DirectX和使用照片作为纹理

4)将像素着色器

5)表面与像素shadered照片

1-4已经解决了保存,但如何实现第5步?

目前我使用下面的代码片断收集修改后的照片:

d3dDevice->GetRenderTarget(0, &surface); 

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

surface->Release(); 
surface = NULL; 

此代码不适合我的需要,因为它抓住了整个现场,不仅纹理(=照片)。我怎样才能实现像素着色照片纹理恢复其原始大小?我想实现同样的结果Shazzam工具提供,但没有WPF ...

预先感谢您!

干杯!

回答

1

我只需要创建一个屏幕外渲染目标(纹理渲染)用适当的维度和一个保存为一个表面(像你这样做的话)。渲染到可见的屏幕空间(听起来像你现在正在做的那样)绝对是你最想避免的。如果您想显示结果,则渲染渲染的纹理。

+0

谢谢!现在就像一个魅力! :) – barnacleboy 2012-08-16 20:37:55

相关问题