Пустые скриншоты в Vista и Win7 при игре - PullRequest
1 голос
/ 17 сентября 2009

Я заметил, что другой человек также попросил помочь в этом. Я прочитал этот пост, и кажется, он еще не решен. Я также попытался перейти от кода к коду в посте «Снимок экрана в 2 клика», но по какой-то причине его реализация в моем коде мешала со всем другим кодом.

На данный момент скриншоты отлично отображаются в Win 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);

Ответы [ 2 ]

4 голосов
/ 17 сентября 2009

Я думаю, вы пытаетесь сделать снимок экрана, используя обычный экранный буфер с аппаратно ускоренной поверхностью. Ваш результат Windows XP, скорее всего, был случайностью: уникальная или неоптимальная конфигурация видео (вы, вероятно, получите те же результаты, если попытаетесь сделать снимок экрана с видео - большой черный, коричневый или розовый прямоугольник, куда видеокарта вставляет ускоренный буфер кадров).

Вам необходимо либо отключить ускорение видео системы (режим совместимости, когда все отображается в программном буфере экрана), который является настройкой всей системы, либо изменить код скриншота для работы непосредственно с графическим API, который вы используете ( DirectX, OpenGL) - код для этого полностью зависит от API / метода, который вы используете для рендеринга.

0 голосов
/ 05 января 2010

Вышеуказанный ответ совершенно неверен, кроме этой цитаты «измените код скриншота, чтобы он работал непосредственно с графическим API, который вы используете (DirectX, OpenGL)»

Это исправить, но сложно.

Ваша проблема в том, что игры отображаются в Vista и Win7 на разных поверхностях.

Вам нужно либо подключить графику (DirectX, OpenGL), либо попробовать снимок экрана DWM.

«Снимок экрана в 2 клика» для XP занял у меня около 2000 кликов и потратил бесчисленные часы в поисках ответа. Это не совсем хорошо документировано (по крайней мере, нет решения .net)

...