線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:941
推到 Plurk!
推到 Facebook!

請問如何用 Direct X 來擷取螢幕的畫面

尚未結案
wu-eric
中階會員


發表:14
回覆:82
積分:64
註冊:2004-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-29 14:07:28 IP:210.60.xxx.xxx 未訂閱
請問如何用 Direct X 來擷取螢幕的畫面
wu-eric
中階會員


發表:14
回覆:82
積分:64
註冊:2004-03-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-30 22:45:36 IP:219.68.xxx.xxx 未訂閱
這個問題已找到解決方法,如以下範例 但因我想抓下來的畫面傳至遠方電腦
是否可抓下來後轉成TMemoryStream
  HWND hWnd;
  IDirect3D9 *g_D3D;
  IDirect3DDevice9 *g_pD3DDevice;
  IDirect3DSurface9 *surf;
  IDirect3DVertexBuffer9 *pD3DBuf;
  D3DPRESENT_PARAMETERS d3dpp;
  D3DDISPLAYMODE *pMode;
  LPDIRECT3DSURFACE9 pd3dsFront = NULL;
  TRect rect;
  short ret;
  if((g_D3D=Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
    Edit1->Text = "Direct Create Error....!";
  else
    Edit1->Text = "Direct Create OK....!";
  g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,pMode);
  ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));
  d3dpp.Windowed = true;
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  d3dpp.BackBufferFormat = pMode->Format;
  hWnd=GetDesktopWindow();
  hWnd = Form1->Handle;
  if(g_D3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice))
    Edit2->Text = "Create Device Error....!";
  else
    Edit2->Text = "Create Device OK....!";
  g_pD3DDevice->GetDisplayMode(0,pMode);
  g_pD3DDevice->CreateOffscreenPlainSurface(pMode->Width,
                pMode->Height,
                D3DFMT_A8R8G8B8,
                D3DPOOL_SYSTEMMEM,
                &pd3dsFront, NULL);
  if( SUCCEEDED( g_pD3DDevice->GetFrontBufferData(0,pd3dsFront) ) )
     ret = D3DXSaveSurfaceToFile("test.bmp", D3DXIFF_BMP, pd3dsFront, NULL, NULL);
  Edit3->Text = ret;
發表人 - taishyang 於 2004/03/30 23:07:55
系統時間:2024-05-10 19:31:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!