PDA

Просмотр полной версии : Скриншот в игре


SultanOFF
13.04.2010, 15:03
Здравствуйте. Как сделать скриншот во время игры? (COD4). Если применять данный код, то вместо скрина черный экран
var ScreenDC: HDC;
canvas:Tcanvas;
begin
ScreenDC:=GetDC(0);
Canvas:=TCanvas.Create();
canvas.Handle:=ScreenDC;
Width:=Screen.Width;
Height:=Screen.Height; Img1.Canvas.CopyRect(Rect(0,0,Img1.Width,Img1.Heig ht), canvas,Rect(0,0,Screen.Width,Screen.Height)); Releasedc(0,ScreenDC);
Canvas.Free;
end;

noxjoker
13.04.2010, 15:05
Тебе нужна сама прога или сорс?

SultanOFF
13.04.2010, 15:09
код нужен :(

Berman
13.04.2010, 15:09
procedure TForm1.Button1Click(Sender: TObject);
var bmp:TBitmap;
begin
bmp := TBitmap.Create;
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;
BitBlt(bmp.Canvas.Handle, 0,0, Screen.Width, Screen.Height,
GetDC(0), 0,0,SRCCOPY);
Image1.Width := Screen.Width;
Image1.Height := Screen.Height;
Image1.Picture.Assign(bmp);
bmp.Free;
end;

Побробуй этот код, должно помочь, ток там размерчики прописать надо кажется

Berman
13.04.2010, 15:09
честно так и не понял, зачем тут канва =(

SultanOFF
13.04.2010, 15:12
тоже самое ведь, тот же черный экран. Тут нужно чтото походу с директХ мудрить, но вот что и как Я непонимаю

Berman
13.04.2010, 15:15
может у игры защита от скринов?

SultanOFF
13.04.2010, 15:20
нет конечно, вот попробуй со своим кодом заскринь любую игру или видео..эффект тот же - черный экран.

JnK
13.04.2010, 20:38
[urt=http://delphiexpert.ru/view_download.php?id=14]Ссылка на прогоисходники[/url]

Если самому писать или гуглить:
DirectShow (DSPack)
Ссылка (http://forum.vingrad.ru/topic-109893.html)
считывать на прямую Оверлей

SultanOFF
14.04.2010, 10:42
по той ссылке на делфи эксперте исходничек такой же как Мой, а значит также черный экран. DSpack установил но совершенно непонимаю как делать скриншот. Кто Может обьяснить?

TRX.new
14.04.2010, 11:10
Я таким не занимался, но может эмулировать нажатие клавиши PrtSc , а затем брать из буфера?!

St0nX
14.04.2010, 11:14
Я таким не занимался, но может эмулировать нажатие клавиши PrtSc , а затем брать из буфера?!
принт скрин не захватывает оверлей.

Keltos
14.04.2010, 11:22
Fraps'ом пользуйся.
он работает, сам пользовался.

SultanOFF
14.04.2010, 11:22
в принципе можно имитировать нажатие клавиши f12(все скриншоты сохраняются в папке ../Call Of Duty 4 - Modern Warfare/main/screenshots) и уже потом делать манипуляции с этим скринами, но опять же это довольно изварщенно....

SultanOFF
14.04.2010, 11:23
Fraps'ом пользуйся.
он работает, сам пользовался. так Мне в своей проге нужно реализолвать

SultanOFF
14.04.2010, 11:38
в общем попробовал Я сымитировать принтскрин и потом вставил в пайнт- нормалек. Значит встает вопрос, как фотку из буфера сохранить в jpg? :)

TRX.new
14.04.2010, 11:57
в общем попробовал Я сымитировать принтскрин и потом вставил в пайнт- нормалек. Значит встает вопрос, как фотку из буфера сохранить в jpg? :)
Вот раз так, то думаю это поможет: http://www.delphi.int.ru/articles/24/

SultanOFF
14.04.2010, 12:09
что то у Меня формат изображения никак не определяется. Перепробовал все варианты..в каком виде хранится скриншот в буфере? И как его записать в переменную bmp?

slesh
14.04.2010, 12:33
почитай про Bitmap.LoadFromClipboardFormat.
Стандартный делфовый хелп гласит следующее:

procedure TForm1.Button1Click(Sender: TObject);

var
Bitmap : TBitmap;
begin
Bitmap := TBitMap.create;
try
Bitmap.LoadFromClipBoardFormat(cf_BitMap,ClipBoard .GetAsHandle(cf_Bitmap),0);
Canvas.draw(0,0,Bitmap);
finally
Bitmap.free;
end;
end;

SultanOFF
14.04.2010, 12:51
попробовал..вылетела ошибка unsupported clipdoard format
Вообще сделал небольшой эксперимент. Попробовал сам нажать принтскрин во время игры, и вашим кодом вставить изображение - все ок.
Попробовал с сэмулированной кнопкой принтскрин - вылетает ошибка, хотя в паинте норм вставляется.. странно..