Просмотр полной версии : Скриншот в игре
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
код нужен :(
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;
Побробуй этот код, должно помочь, ток там размерчики прописать надо кажется
честно так и не понял, зачем тут канва =(
SultanOFF
13.04.2010, 15:12
тоже самое ведь, тот же черный экран. Тут нужно чтото походу с директХ мудрить, но вот что и как Я непонимаю
может у игры защита от скринов?
SultanOFF
13.04.2010, 15:20
нет конечно, вот попробуй со своим кодом заскринь любую игру или видео..эффект тот же - черный экран.
[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 установил но совершенно непонимаю как делать скриншот. Кто Может обьяснить?
Я таким не занимался, но может эмулировать нажатие клавиши PrtSc , а затем брать из буфера?!
Я таким не занимался, но может эмулировать нажатие клавиши PrtSc , а затем брать из буфера?!
принт скрин не захватывает оверлей.
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? :)
в общем попробовал Я сымитировать принтскрин и потом вставил в пайнт- нормалек. Значит встает вопрос, как фотку из буфера сохранить в jpg? :)
Вот раз так, то думаю это поможет: http://www.delphi.int.ru/articles/24/
SultanOFF
14.04.2010, 12:09
что то у Меня формат изображения никак не определяется. Перепробовал все варианты..в каком виде хранится скриншот в буфере? И как его записать в переменную bmp?
почитай про 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
Вообще сделал небольшой эксперимент. Попробовал сам нажать принтскрин во время игры, и вашим кодом вставить изображение - все ок.
Попробовал с сэмулированной кнопкой принтскрин - вылетает ошибка, хотя в паинте норм вставляется.. странно..
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot