IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Plantage de la copie d'écran sous Ubuntu 22.04 [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Plantage de la copie d'écran sous Ubuntu 22.04
    Bonjour à toutes et à tous,

    Cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Bmp32.LoadFromDevice(screenDC);            {Le bitMap écran est en 32 bits}
    Qui ne me pose pas de problème sous Windows, plante sous Ubuntu (22.04.2 LTS)

    Déboguant cette instruction, j'en arrive, dans l'unité "intfGraphics" à cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TLazIntfImage.LoadFromDevice(DC: HDC);
    var
      R: TRect;
      RawImage: TRawImage;
      DeviceSize: TPoint;
    begin
      GetDeviceSize(DC, DeviceSize);
      R := Rect(0,0,DeviceSize.X,DeviceSize.Y);
      if not RawImage_FromDevice(RawImage, DC, R) then
        raise FPImageException.Create('Failed to get raw image from device');
      SetRawImage(RawImage);
    end;
    où ça plante sur la ligne en gras avec le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Failed to get raw image from device dans le fichier "intfGraphics.pas" à la ligne 3619.
    Une idée du problème ?

    Cordialement.

    Pierre.

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Pierre essayes ca, pour voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function takeDesktopScreenShot: Graphics.TBitmap;
    var
      TmpBmp: Graphics.TBitmap;
      ScreenDC: HDC;
    begin
      ScreenDC := GetDC(0);
      try
        TmpBmp := Graphics.TBitmap.Create;
        TmpBmp.LoadFromDevice(ScreenDC);
      finally
        ReleaseDC(0, ScreenDC);
        if (TmpBmp.Width > 0) and (TmpBmp.Height > 0) then
        begin
           result := TmpBmp
        end
        else result := nil;    
      end;
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Malheureusement pas mieux : même exception.

    En fait, la fonction que tu me proposes ressemble à la mienne sauf que tu as remplacé TBitmap par Graphics.TBitmap

    J'ai aussi essayé en remplaçant TBitmap par Graphics.TBitmap dans ma fonction : même résultat.

    Voici celle que j'utilisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function GetScreenshot(EcranTotal: Boolean): TBitmap;
    var
      screenDC: HDC;
      Bmp32: TBitmap;
      RctSrc, RctDst: TRect;
    begin
      screenDC:= GetDC(0);
      try
        Bmp32:= TBitmap.Create;
        Bmp32.LoadFromDevice(screenDC);            {Le bitMap écran est en 32 bits}
        Result:= TBitmap.Create;
        with Result do
        begin
          PixelFormat:= pf24bit;      {On veut que l'image acquise soit en 24 bits}
          Width := Bmp32.Width;
          Height:= Bmp32.Height;
          if ECranTotal then
            Canvas.Draw(0, 0, Bmp32)                {Conversion de 32 vers 24 bits}
          else
          begin
            RctSrc:= Rect(OrgS.x, OrgS.y, FinS.x, FinS.y);
            RctDst:= Rect(0, 0, DimS.x, DimS.y);
            Canvas.CopyRect(RctDst, Bmp32.Canvas, RctSrc);
          end;
        end;
      finally
        ReleaseDC(0, screenDC);
        Bmp32.Free;
      end;
    end;
    D'ailleurs, je me demande si ce n'est pas toi qui en es à l'origine.

    Cordialement.

    Pierre.

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Pierre, J'ai été faire un tour sur le forum anglais, le problème semble venir de Ubuntu. Vérifies dans tes paramètres si Ubuntu utilises le gestionnaire graphique de fenêtre X11 ou Wayland. Si il utilises ce dernier repasses sur X11.


    PS: Tu peux tester la solution proposée dans le wiki de Free Pascal : https://wiki.lazarus.freepascal.org/Screenshot
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Bonjour Jérôme,

    Merci pour cette proposition qui s'est avérée efficace et me permet de capturer les copies d'écran.

    Par ailleurs, dans le cas de mon PC, je n'ai remarqué aucune différence fonctionnelle entre les deux modes.

    Cordialement.

    Pierre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plantage Eclipse sous Ubuntu
    Par pcouas dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/03/2013, 18h03
  2. résolution d'écran sous ubuntu 8.04
    Par sofiene D dans le forum Ubuntu
    Réponses: 0
    Dernier message: 27/08/2009, 15h31
  3. double écran sous ubuntu 7.10
    Par caro_caro dans le forum Ubuntu
    Réponses: 1
    Dernier message: 18/10/2008, 06h18
  4. [VLC] plantage de VLC sous ubuntu
    Par dragonfly dans le forum Vidéo
    Réponses: 0
    Dernier message: 04/02/2008, 20h55
  5. Plantage SDL sous Ubuntu
    Par fabgamer dans le forum SDL
    Réponses: 6
    Dernier message: 04/06/2007, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo