Classe pour les captures d'écran (Winapi, DirectDraw, DirectX)

CynicRus Messages postés 2 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 12 avril 2014 - 12 avril 2014 à 13:07
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 - 18 mai 2014 à 23:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/100502-classe-pour-les-captures-d-ecran-winapi-directdraw-directx

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
18 mai 2014 à 23:54
Salut,
Mais pourquoi passer par un TPicture ?
Quoique... pourquoi pas après tout.
Une autre solution étant de passer le TBitmap en variable dans une procedure.
Quoi qu'il en soit, attention à bien libérer le TPicture puisqu'il est créé dans la fonction.
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
4 mai 2014 à 17:19
Bonjour, je me suis permis d'éditer ton message, pour préciser à la coloration syntaxique qu'il s'agit de delphi. En effet avec la balise de code par défaut, le site choisi ce qu'il veut et le résultat n'est pas toujours au mieux.
Tu peux préciser le langage en cliquant sur la flèche descendante à droite de <>.
cs_pseudo3 Messages postés 268 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 2 février 2021 1
Modifié par Whismeril le 4/05/2014 à 17:15
Bonjour,

Quelle usine à gaz pour une simple capture d'écran !!!
Pour ma part je me contente de cette fonction :

function CopierEcran(xe, ye, we, he: integer): tBitMap;
// Renvoie le BitMap d'une capture d'écran en xe,ye large de we et haute de he
// xe,ye = coordonnées-écran (ClientToScreen) de l'angle-supérieur-gauche de la capture
var HandleDC: HDC; Picture: TPicture;
begin
  HandleDC := GetDC(GetDesktopWindow);
  Picture := TPicture.Create;
  try
    Picture.Bitmap.PixelFormat := pf32bit;
    Picture.Bitmap.Width := we;
    Picture.Bitmap.Height := he;
    BitBlt(Picture.Bitmap.Canvas.Handle, 0, 0, we, he,
      HandleDC, xe, ye, SrcCopy); //recopie l'image de la région d'écran dans PictureBureau
  finally
    Result := tBitMap.create;
    Result.Assign(Picture.BitMap);
    ReleaseDC(GetDesktopWindow, HandleDC);
  end;
end; // CopierEcran


A+.
Rejoignez-nous