: http://www.ring3circus.com/gameprogramming/case-study-fraps/ をし、私はそれが、ある(そして作者も自分のコードを使用しないことを示唆して)何歳与えられたことを実現するために来ている、これは本当にISNその私のニーズに合ったものになる(1つはC#、2つはDX9)。私は、DirectXのゲームウィンドウの長方形キャプチャを取得しようとしていると私は参照できるストリーミングビデオのいくつかの並べ替えとしてメモリに持っています。フォアグラウンドではなく、可視(他のウィンドウの後ろに埋もれている)していても、ウィンドウをキャプチャできる必要があります。私はそのC#ライブラリ(EasyHookとSlimDXで作られたもの)を試しましたが、私は64ビットのDirectX 11ゲームでデモを正常に動作させることができました(それ以来再現できませんでした)。それでも捕獲率は目が鈍っていた。 DirectXへのオーバーレイをカバーする他の多くのものと一緒に(私は必要ありません)。私は捕獲が行く限り、どのくらいのことを模倣したいのですが、私はゲーム全体ではなく長方形の領域を必要とし、ファイルに書き込む必要はありません。 DX9トラフDX11で動作するC#のゲームウィンドウの四角形を高速にフレームキャプチャする方法のコードサンプルを入手できましたか?DX9/10月11日SceenキャプチャC#の
1
A
答えて
3
ここに同じ問題のC++コードがあります。
ID3D11Texture2D* pSurface;
HRESULT hr = m_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast< void** >(&pSurface));
if(pSurface)
{
const int width = static_cast<int>(m_window->Bounds.Width * m_dpi/96.0f);
const int height = static_cast<int>(m_window->Bounds.Height * m_dpi/96.0f);
unsigned int size = width * height;
if(m_captureData)
{
freeFramebufferData(m_captureData);
}
m_captureData = new unsigned char[ width * height * 4 ];
ID3D11Texture2D* pNewTexture = NULL;
D3D11_TEXTURE2D_DESC description;
pSurface->GetDesc(&description);
description.BindFlags = 0;
description.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
description.Usage = D3D11_USAGE_STAGING;
HRESULT hr = m_d3dDevice->CreateTexture2D(&description, NULL, &pNewTexture);
if(pNewTexture)
{
m_d3dContext->CopyResource(pNewTexture, pSurface);
D3D11_MAPPED_SUBRESOURCE resource;
unsigned int subresource = D3D11CalcSubresource(0, 0, 0);
HRESULT hr = m_d3dContext->Map(pNewTexture, subresource, D3D11_MAP_READ_WRITE, 0, &resource);
//resource.pData; // TEXTURE DATA IS HERE
const int pitch = width << 2;
const unsigned char* source = static_cast< const unsigned char* >(resource.pData);
unsigned char* dest = m_captureData;
for(int i = 0; i < height; ++i)
{
memcpy(dest, source, width * 4);
source += pitch;
dest += pitch;
}
m_captureSize = size;
m_captureWidth = width;
m_captureHeight = height;
return;
}
freeFramebufferData(m_captureData);
}
これをC#に移植するか、少なくともライブラリでラップすることができます。私は同様の質問をしましたが、答えを見つけました:DirectX 11 framebuffer capture (C++, no Win32 or D3DX)
関連する問題
- 1. 03/20/11 11:24(月/日/年HOUR:MIN)
- 2. android sceen locksのスクリーンセーバー
- 3. 現在の暦月と今後11ヵ月の日付を取得する
- 4. C++ 11日付から日数
- 5. C#リストを日付(2015年9月11日 - >日付フォーマット)で降順でソートする?
- 6. 2011年11月25日から11月25日にxmlフィードの日付書式をPHPに変換しますか?
- 7. Golang:Zip Package Modified Timeデフォルトは1979年11月30日00:00
- 8. C++ 11ラムダキャプチャによる値のキャプチャ宣言ポイント
- 9. C#DateTime各月の最後の1日
- 10. 変更月/日/月
- 11. 生年月日から年月日
- 12. 前日の月曜日の開始(月曜日)
- 13. C#:Excelの日付FromOadateは日と月を反転します
- 14. Python形式の日付は「1991年1月1日月曜日」
- 15. SSRSで前月の最終日をSSRSで11:59:59 PMとするには
- 16. MFP 7.0 2014年11月11日iFixインストール/アップデートがMFPサーバに反映されない
- 17. 1月の月の重複日数
- 18. マイナス今日の月の次の月の日付
- 19. calendar.getActualMaximum(Calendar.WEEK_OF_YEAR)は、1月11日に52を返し、12月に53を返します。
- 20. 最初の日付と月から月の最後の日付
- 21. 各月の初日
- 22. ルビーのTime.new(年、月、日)とTime.local(年、月、日)の差
- 23. SSRS前回月曜日の月曜日までの表現
- 24. 月と日
- 25. ピボットアクティビティコード日月
- 26. get日付から月の月数
- 27. 日付:30/11/-0001
- 28. vxworksのC++ 11
- 29. javascript作成日年月日
- 30. Googleマップウェブ(11月2017新しいUI)マーカーアイコン
これは良い質問です。 DX9や他の無関係なソリューションの下に埋もれているネット上で、簡単に答えを見つけることはできません。 – jheriko