首页
社区
课程
招聘
[求助]求助前辈们direct截图的问题,截出的图是花的
发表于: 2012-10-4 01:11 5091

[求助]求助前辈们direct截图的问题,截出的图是花的

2012-10-4 01:11
5091
从没接触过directX,搞了两天了,还没搞明白。硬着头皮,
研究了两天写了两个小程序测试了一下

Direct3D9App是一个D3D模式粒子放射循环动画窗口,
DirectXTest用Direct3D9App的窗口名,找到它的句柄,想给它截图可截出来的图是花的,如下图

这是为什么呀,我实在是搞不明白了,求前辈指点,感激不尽啊



代码在这里

void CDirectXTestDlg::OnBnClickedButton() //点击截图的按钮的函数
{
       
        UpdateData(TRUE);
        if(m_windowname==L"")                //m_windowname是CDirectXTest中的编辑框变量
                return;
        IDirect3DDevice9* directDevice = 0;
        HWND hwnd=::FindWindow(NULL,m_windowname.AllocSysString());
        if(hwnd==NULL)
                return;
        CRect rect;
        ::GetClientRect(hwnd,&rect);
        D3DDISPLAYMODE d3dDipMode;
        if(FALSE==CreateDirectDevice(hwnd,rect.Width(),rect.Height(), true, D3DDEVTYPE_HAL, &directDevice,&d3dDipMode))
                return;
        CopyBmp(L"E:\\1.bmp", directDevice);
        directDevice->Release();
        directDevice=NULL;
}
HRESULT CopyBmp(TCHAR* filename,IDirect3DDevice9* pDev)
{
        HRESULT hr;
        D3DDISPLAYMODE mode;
        IDirect3DSurface9* surf;
        if (FAILED(hr=pDev-> GetDisplayMode(0,&mode)))
                return hr;
        if (FAILED(hr=pDev->CreateOffscreenPlainSurface(mode.Width,mode.Height,D3DFMT_A8R8G8B8,D3DPOOL_SYSTEMMEM,&surf,NULL)))
                return hr;
        if (FAILED(hr=pDev->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_FORCE_DWORD,&surf)))
        {
                surf-> Release();
                return hr;
        }
        hr=D3DXSaveSurfaceToFile(filename,D3DXIFF_BMP,surf,NULL,NULL);
        surf-> Release();
        return hr;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
我错了,下回这样的问题,我会发代码,不应该发图,耐下心来学习了dirext,还有高手们的贴,发现这不是一个简单的事情,不是一下子就能实现的
2012-10-6 22:26
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
3
不是你发不发图,你就发个图,人还知道你怎么弄的,谁能想象到你的代码是怎么写的
2012-10-8 10:34
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
发现图片花的原因是
hr=D3DXSaveSurfaceToFile(filename,D3DXIFF_BMP,surf,NULL,NULL);
图片格式参数是D3DXIFF_BMP,而我设用来保存的文件名是"E:\\1.jpg",文件格式错了
我把改进后的源码补上去了,现在不花了,但是位置是错的
上传的附件:
  • 1.JPG (177.00kb,43次下载)
2012-10-10 13:48
0
游客
登录 | 注册 方可回帖
返回
//