2009-09-17 11 views
1

나는 다른 사람에게도 도움을 요청했습니다. 그 글을 읽었는데 아직 해결되지 않은 것 같습니다. 나는 또한 내 코드에서 "스크린 샷 2 클릭"포스트의 코드로 변경해 보았습니다.하지만 그 코드를 구현하면 다른 이유로 모든 코드가 엉망이되었습니다.비어있는 스크린 샷 게임을 할 때 Vista 및 Win7에서

현재 Windows XP에서는 스크린 샷이 완벽하게 표시됩니다. Vista와 Win7에서는 게임이 창 모드로 재생되지 않는 한 공백으로 표시됩니다. 나는 누군가가 우리 프로그램을 끝내는 마지막 단계이기 때문에 우리를 도울 수 있기를 바랍니다. 우리는이 문제가 해결되지 않으면 끝낼 수 없습니다.

스크린 샷을 위해 사용하고있는 C# 코드는 다음과 같습니다.

Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
            Screen.PrimaryScreen.Bounds.Height, 
            PixelFormat.Format32bppArgb); 
Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot); 
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, 
          Screen.PrimaryScreen.Bounds.Y, 
          0, 0, 
          Screen.PrimaryScreen.Bounds.Size, 
          CopyPixelOperation.SourceCopy); 
+10

Simar : 제목에 '긴급한'이라고 쓰지 마십시오. 저와 같은 사람들을 위해 자동 응답을 시작합니다 :) 긴급한 문제는 우리 문제가 아닙니다. 우리가 적합하다고 볼 때 당신의 흥미로운 문제를 해결하는 것입니다 :) –

답변

4

하드웨어 가속 표면의 일반 화면 버퍼를 사용하여 스크린 샷을 만들려고합니다. 고유하거나 비 최적의 비디오 구성 (비디오 스크린 샷을 찍으려고하면 똑같은 결과를 얻을 수 있습니다 - 비디오 카드에 큰 검정색, 갈색 또는 분홍색 직사각형이 삽입되는 경우) 가속 프레임 버퍼).

시스템 전체 설정 인 시스템 비디오 가속 (모든 것이 소프트웨어 화면 버퍼로 렌더링되는 호환 모드)을 낮추거나 사용중인 그래픽 API로 직접 작동하도록 스크린 샷 코드를 변경해야합니다 (DirectX, OpenGL) -이 코드는 렌더링에 사용하는 API/메소드에 전적으로 의존합니다. 이 인용문은 "당신이 (다이렉트, OpenGL을)를 사용하는 그래픽 API로 직접 작업하는 스크린 샷 코드를 변경"이외의 대답 위

+0

안녕 데이빗, 답장을 보내 주셔서 감사합니다. 그래, 게임은 OpenGL에서 실행되었습니다. 그것은 winxp에서 매번 완벽하게 작동합니다. OpenGL과 작동하도록 코드를 변경하는 방법에 대한 정보는 어디에서 얻을 수 있습니까? –

+0

glReadPixels을 사용하여 픽셀을 읽을 수도 있고 pBuffer 확장을 사용하여 현재 화면의 복사본을 원하는 메모리 버퍼로 렌더링 할 수 있습니다. 첫 번째 방법은 추가하는 것이 더 쉽습니다 (두 번째 방법은 CPU 관점에서 더 빠르지 만 기존 코드에 통합하는 것이 더 어려울 수 있습니다 (프레임을 렌더링해야 함). 두 번째로, 화면 대신 pBuffer에만 적용) – David

-2

완전히 잘못 수정하지만 어려운

.

당신의 문제는 게임이 비스타와 win7의 다른 표면에 렌더링된다는 것입니다.

그래픽 (DirectX, OpenGL)을 연결해야하거나 DWM 화면 캡처를 시도해야합니다.

xp에 대한 "2 회 클릭으로 스크린 샷"은 약 2,000 번의 클릭과 대답을 찾는 무수한 시간을 가졌습니다. 그것은 전혀 문서화되지 않았습니다 (적어도 순수한 net 솔루션은 isnt입니다)