Скриншот в игре

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SultanOFF, 13 Apr 2010.

  1. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    Здравствуйте. Как сделать скриншот во время игры? (COD4). Если применять данный код, то вместо скрина черный экран
    Code:
    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.Height),   canvas,Rect(0,0,Screen.Width,Screen.Height));   Releasedc(0,ScreenDC);  
     Canvas.Free;
     end;
     
  2. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    Тебе нужна сама прога или сорс?
     
  3. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    код нужен :(
     
  4. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    Побробуй этот код, должно помочь, ток там размерчики прописать надо кажется
     
  5. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    честно так и не понял, зачем тут канва =(
     
  6. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    тоже самое ведь, тот же черный экран. Тут нужно чтото походу с директХ мудрить, но вот что и как Я непонимаю
     
  7. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    может у игры защита от скринов?
     
  8. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    нет конечно, вот попробуй со своим кодом заскринь любую игру или видео..эффект тот же - черный экран.
     
  9. JnK

    JnK Elder - Старейшина

    Joined:
    30 Mar 2007
    Messages:
    125
    Likes Received:
    21
    Reputations:
    0
    [urt=http://delphiexpert.ru/view_download.php?id=14]Ссылка на прогоисходники[/url]

    Если самому писать или гуглить:
    DirectShow (DSPack)
    Ссылка
    считывать на прямую Оверлей
     
  10. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    по той ссылке на делфи эксперте исходничек такой же как Мой, а значит также черный экран. DSpack установил но совершенно непонимаю как делать скриншот. Кто Может обьяснить?
     
  11. TRX.new

    TRX.new Member

    Joined:
    27 Apr 2009
    Messages:
    151
    Likes Received:
    21
    Reputations:
    0
    Я таким не занимался, но может эмулировать нажатие клавиши PrtSc , а затем брать из буфера?!
     
  12. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    принт скрин не захватывает оверлей.
     
  13. Keltos

    Keltos Banned

    Joined:
    8 Jul 2009
    Messages:
    1,558
    Likes Received:
    920
    Reputations:
    520
    Fraps'ом пользуйся.
    он работает, сам пользовался.
     
    2 people like this.
  14. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    в принципе можно имитировать нажатие клавиши f12(все скриншоты сохраняются в папке ../Call Of Duty 4 - Modern Warfare/main/screenshots) и уже потом делать манипуляции с этим скринами, но опять же это довольно изварщенно....
     
  15. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    так Мне в своей проге нужно реализолвать
     
  16. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    в общем попробовал Я сымитировать принтскрин и потом вставил в пайнт- нормалек. Значит встает вопрос, как фотку из буфера сохранить в jpg? :)
     
  17. TRX.new

    TRX.new Member

    Joined:
    27 Apr 2009
    Messages:
    151
    Likes Received:
    21
    Reputations:
    0
    Вот раз так, то думаю это поможет: http://www.delphi.int.ru/articles/24/
     
  18. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    что то у Меня формат изображения никак не определяется. Перепробовал все варианты..в каком виде хранится скриншот в буфере? И как его записать в переменную bmp?
     
  19. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    почитай про Bitmap.LoadFromClipboardFormat.
    Стандартный делфовый хелп гласит следующее:
    Code:
    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;
    
     
    #19 slesh, 14 Apr 2010
    Last edited: 14 Apr 2010
  20. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    попробовал..вылетела ошибка
    Вообще сделал небольшой эксперимент. Попробовал сам нажать принтскрин во время игры, и вашим кодом вставить изображение - все ок.
    Попробовал с сэмулированной кнопкой принтскрин - вылетает ошибка, хотя в паинте норм вставляется.. странно..
     
    #20 SultanOFF, 14 Apr 2010
    Last edited: 14 Apr 2010