: http://www.ring3circus.com/gameprogramming/case-study-fraps/ 을하고 나는이 정말 잘못되고 있음을, 그것이 얼마나 오래된 부여 (그리고 저자는 심지어 자신의 코드를 사용에 대한 제안) 실현 왔어요 스위트 룸에 들어갈 필요가 없습니다 (하나, C#, 둘, DX9 용). DirectX 게임 창을 사각형으로 캡처하고 참조 할 수있는 일종의 스트리밍 비디오 메모리로 가져 오려고합니다. 창은 전경이 보이지 않거나 보이지 않는 경우 (다른 창 뒤에 묻혀있을 때) 캡처 할 수 있어야합니다. C# 라이브러리 (EasyHook 및 SlimDX로 만든 라이브러리)를 사용해 보았지만 64 비트에서 DirectX 11 게임을 사용하여 한 번만 성공적으로 작업 할 수있었습니다 (그 이후로는 재현 할 수 없었습니다). 그 당시에도 포착률은 눈을 피로하게 느리게 나타났습니다. DirectX에 오버레이를 적용하는 많은 다른 것들과 함께 (필자는 필요하지 않음). 캡쳐가 될 때까지는 무엇을하는지 모방하고 싶습니다만, 모든 부분이 아닌 사각형 영역이 필요합니다. 파일에 쓰지 않아도됩니다. DX9 트로프 DX11에서 작동하는 C#의 게임 창의 주어진 사각형의 빠른 프레임 캡처를 관리하는 방법에 대한 코드 샘플을 얻을 수 있습니까?DX9 캡처 C#을 나는이 arcile 읽고 있었다
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. 나는이 책을 읽고 있었다, 최근
- 2. 질문, 나는이 기사를 읽고 있었다 PHP
- 3. 다른 가변 사이클 ARM 명령어는 무엇입니까? 나는이 책을 읽고 있었다
- 4. 배열, 포인터와 포인터 유한 상태 기계의 기능에 나는이 읽고 있었다
- 5. 나는이 스레드를 살펴 있었다
- 6. 나는이 질문을 읽고
- 7. C을 찾는 ++ 구현()`
- 8. 파이썬 : 압축을 풀고 IBM 32 비트 나는이 같은 파이썬에서 바이너리 파일을 읽고 있었다
- 9. 교리 2 : 나는 교리 2 문서를 읽고 있었다
- 10. 문자열로가 아니라 내가 PHP 설명서를 읽고 있었다 PHP
- 11. 코어 위치는 아이폰 내가 아래에 코멘트를 읽고 있었다
- 12. JSON을 읽고 분석 내 isseu에 대한 답을 찾고 있었다
- 13. 자바 : 증가 YoungGen 크기 내가 다음 문서를 읽고 있었다
- 14. setImageResource은 문자열과의 int는 잘 작동 한 나는이 있었다
- 15. 루비 오류 나는이 스크립트를 실행하는 데 문제가 있었다
- 16. C/C을 찾고 ++ 언어와 표준 라이브러리 사양
- 17. 이벤트를 안전하게 스레드로 전달하는 방법. SlimDX/DX9
- 18. 이해 샘플 내가 테이블보기에서 행을 추가하는 방법을 알아 보려면 문서를 읽고 있었다
- 19. 나는이 책을 읽고 새로운 속성을 추가하려고 fosuserbundle 및 sonatauser
- 20. 나는 문제가 있었다 안드로이드
- 21. 어떻게 좋은 ListView에 있었다
- 22. 읽고
- 23. 읽고
- 24. IOS AUGraph 피치 나는 AUGraph에 대한 설명서를 읽고 있었다 IOS 5.0
- 25. 자바 스크립트 폐쇄 내가 폐쇄에 대한 참고 사항이 웹 사이트를 읽고 있었다
- 26. 서명 캡처
- 27. 복어 크립트 나는이 있었다 예제 스크립트 발견 <p></p> 혼란
- 28. 왜 MNIST 데이터를 읽으려고 할 때 EOFError 오류가 발생합니까? 나는이 코드를 실행중인이 오류를 얻고 있었다
- 29. DX9 장치를 만들 때 어떻게 여러 장치 CreateFlags를 전달합니까?
- 30. HLSL (DX9-> DX10 포트)의 쉐이더 리소스 사용
이것은 좋은 질문이다. DX9와 다른 관련없는 솔루션 아래에 묻혀있는 인터넷에서 쉽게 답변을 찾을 수 있습니다. – jheriko