|
捕捉DIRECTX程序屏幕(Saving a Screen Shot in a Direct3D Application) ——ZH1110
在此文章中,我将要解释如何保存VisualBasic6 & DIRECTX程序屏幕到一位图文件.我们使用D3DX8类的SaveScreenShot函数.SrcPalette参数看上去比较容易扰乱视线.因为不管你是否创建索引颜色,你必须通过一个未初始化的 PALETTEENTRY结构到 SaveSurfaceToFile函数. 如果通过 Nothing 会产生失败. 最后说一下D3DX8对象,它不直接参与渲染,目的是为了简化各种任务如:创建贴图(CreateTexture),管理网格(CreateMesh),装配shaders(AssembleShader)等等。
看一下这个简单的函数: Public Sub SaveScreenShot(ByVal sFilename As String)
Dim g_D3DX As New D3DX8 Dim oSurface As Direct3DSurface8
.Top = 0
上面函数假设 g_D3DDevice已创建。 首先我们取得屏幕大小,(如果要捕捉窗口还要用API函数ClientToScreen,GetWindowRect取得图片框区域),然后我们创建一个和屏幕一样大小的surface.因为GetFrontBuffer函数不管当前背景缓冲是什么格式总是返回D3DFMT_A8R8G8B8,所以oSurface也要定义成D3DFMT_A8R8G8B8(32位真彩色格式).再用 GetFrontBuffer函数取得前景, 这是唯一获得抗锯齿输出的方法. 最后用 SaveSurfaceToFile 写到BMP文件。
注意:这个函数没有任何错误检查语句。在任何DirectX程序中你总要建立错误检查以方便调试。比如在保存实际文件前检查路径是否有效。这个函数也很容易加入返回数值.
|