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 :

Obtenir un TBGLBitmap à partir d'un fichier ressource [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut Obtenir un TBGLBitmap à partir d'un fichier ressource
    Bonjour à toutes et à tous,

    Pour obtenir un TBitMap, on utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonBmp:= TBitMap(CreateBitmapFromLazarusResource('monImage'));
    L'un d'entre vous (honte à moi, je ne retrouve plus qui ) m'a donné la solution pour obtenir un TBGRABitmap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function BGRABitmapFromResource(NomRes: String): TBGRABitmap;
    var
      Pict: TPicture;
    begin
       Pict:= TPicture.Create;
       Pict.LoadFromLazarusResource(NomRes);
       Result:= TBGRABitmap.Create(Pict.Bitmap);
       Pict.Free;
    end;
    Malheureusement, aucune de ces deux méthodes ne permet d'obtenir un TBGLBitmap.

    Avez-vous une idée de la manière de procéder ?

    Cordialement.

    Pierre

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Et avec la fonction LoadFromResource de BGRABitmap?
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  3. #3
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Et avec la fonction LoadFromResource de BGRABitmap?
    Avec ma version 9.6.2, je n'ai pas trouvé cette fonction. De plus, je pense que ce devrait être une fonction de BGLBitmap ?

    Cordialement.

    Pierre

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Ah oui c’est à partir de la version 9.9.3.
    https://github.com/bgrabitmap/bgrabi...ses/tag/v9.9.3

    Une fonction de TBGRABitmap se retrouve en principe dans TBGLBitmap puisque cette classe dérive de l’autre.

    Cordialement
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  5. #5
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Ah oui c’est à partir de la version 9.9.3.
    https://github.com/bgrabitmap/bgrabi...ses/tag/v9.9.3

    Une fonction de TBGRABitmap se retrouve en principe dans TBGLBitmap puisque cette classe dérive de l’autre.

    Cordialement
    J'ai téléchargé cette version et l'ai installé. Ça compile, mais à l'exécution, ça plante avec l'erreur "SIGSEGV".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        bmpNord.LoadFromResource('cap_bsl.PNG', [loBmpAutoOpaque]); //que je place 'cap_bsl' ou 'cap_bsl.png' ou cap_bsl.PNG', c'est la même chose
    Par ailleurs :

    Mes cadrages sont changés (une demi-fenêtre d'affichage en X a priori) et l'affichage d'un texte me le rend la tête en bas et aussi décadré !

    Cordialement.

    Pierre

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Ce sera plus facile de localiser le problème et de trouver une solution si tu utilises la dernière version. Comme ça tu pourrais me donner la ligne exacte où se produit l’erreur. Pour cela, il faudra désactiver les optimisations et activer les infos de déboggage. Mais déjà il faudrait voir si le problème arrive avec la dernière version.
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  7. #7
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 210
    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 210
    Points : 3 139
    Points
    3 139
    Billets dans le blog
    2
    Par défaut
    Salut Pierre

    Comment as tu formé ton fichier ressource LRS ?


    Si jamais dans le dossier de Lazarus il y a un sous dossier Tools avec un utilitaire nommé GlazRes si non tu peux en trouver également un autre ici : https://sourceforge.net/projects/lrsexplorer/ et la https://github.com/adnan360/lrs-maker il te faudra juste copier l'utilitaire en ligne de commande Lazres dans le dossier des applications.
    Il faut également faire attention à la casse des caractères (cap_bsl <> Cap_bsl) si je me souviens bien et évites peut-être les caractères spéciaux comme le underscore (capbsl)

    Bon dimanche
    • "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

  8. #8
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Avec la dernière version 10.2 :

    • LoadfromResource plante avec la même erreur, et même avec le débogage actif et sans optimisation, je ne peux pas entrer dans cette procédure pour y voir ce qui se passe.
    • Mon défaut de cadrage a disparu. Avec toutes ces modifs, j'ai dû faire une fausse manip,
    • L'affichage de texte avec TextOut dans cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TAffCarte.Aff_Infos(Txt: String; STxt: Integer; PTxt: TPointF; ClTxt: TBGRAPixel);
    var
      LText, HText: Extended;
    begin
      TextGPS:= BGLFont('Arial', STxt, ClTxt, [fsBold]); // STxt est la taille du texte
      LText:= TextGPS.TextWidth(Txt);
      HText:= TextGPS.TextHeight(Txt);
      BGLCanvas.FillRoundRect(PTxt.X-LText/2-5, PTxt.Y-3, PTxt.X+LText/2+5, PTxt.Y+HText+3, 10, 10, ClFond, [rrDefault], True);
      TextGPS.TextOut(PTxt.X-LText/2, PTxt.Y, Txt, ClTxt);
    end;
    • me donne une écriture la tête en bas pour une taille de texte > 20 ?
    • Sous Raspbian STRETCH (environnement linux pour Raspberry), la compilation du paquet BGRABitmap.pack.lpk plante à la ligne 1538 du fichier "unibitmap.inc" car il n'y a pas le bon nombre de paramètres pour la fonction Intersect.

    Cordialement.

    Pierre

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Hmmm Pierre, as-tu pensé à allouer l’image avec Create avant de faire LoadFromResource?
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  10. #10
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Hmmm Pierre, as-tu pensé à allouer l’image avec Create avant de faire LoadFromResource?
    Belle erreur de ma part, je ne l'avais pas fait

    j'ai écrit ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        BmpNord.Create(96, 96); // Taille de mon image
    Ça compile, mais ça plante avec l'erreur "SIGSEGV".
    J'écris alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        BmpNord.Create(96, 96, VGABlack);
        BmpNord.LoadFromResource('cap_bsl');
    La création passe, mais ça plante au loadFromResource avec la même erreur.

    Cordialement.

    Pierre

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Ah mais non c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bmpNord := TBGLBitmap.Create;
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  12. #12
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Ah mais non c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bmpNord := TBGLBitmap.Create;
    Oh oui, c'est vrai, je n'ai plus toute ma tête en ce moment. Merci.

    Pour autant, restent les deux autres problèmes cités plus haut.

    Cordialement.

    Pierre

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Ok.

    Concernant l'erreur de compilation, si tu fais CTRL-Click sur le nom "Intersect" de la ligne 1538, est-ce que tu arrives dans l'unité "typshrdh.inc" et avec cela?
    Code delph : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           class function Intersect(R1: TRect; R2: TRect): TRect; static;
           procedure Intersect(R: TRect);

    Sinon est-ce que remplacer la ligne 1538 par ces deux lignes résout la compilation?
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    actualRect := ARect;
    actualRect.Intersect(rect(0,0,Width,Height));
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  14. #14
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par circular17 Voir le message
    ... Concernant l'erreur de compilation, si tu fais CTRL-Click sur le nom "Intersect" de la ligne 1538, est-ce que tu arrives dans l'unité "typshrdh.inc" et avec cela?
    Code delph : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           class function Intersect(R1: TRect; R2: TRect): TRect; static;
           procedure Intersect(R: TRect);
    Non, j'arrive dans le fichier "geometrytypes.inc" à la ligne 62 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure Intersect(const(ARect: TRect);
    J'essaie néanmoins ce que tu me proposes, ça compile pour ce fichier, mais il faut que je fasse la même chose dans l'unité "BGRAGrayScaleMask" à la ligne 440. Ça passe, mais je me retrouve avec l'erreur suivante dans l'unité BGRATextBidi à la ligne 1457 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    identifier idents no member intersectswith
    Je ne vais pas modifier tous ces fichiers.

    Par ailleurs, sur mon PC, sous Windows et Ubuntu, j'ai Lazarus 1.6.4 et ça passe sans problème. Par contre, sur mon Raspberry Pi3 B+, j'ai Lazarus 1.6.2. Est-ce que le problème peut venir de là ?

    Et toujours l'erreur de texte "up side down" pour une taille supérieure à 20.

    Cordialement.

    Pierre

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Ok donc oui c'est une question de version de FPC. Oui ne t'embête pas à tout modifier parce que tu n'utilises pas Git alors je ne peux pas incorporer facilement tes changements.

    Je vais essayer d'installer une ancienne version et colmater les trous dans la compilation.

    Pour le texte à l'envers, je vais voir si je peux reproduire le problème ou trouver la raison.
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  16. #16
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Re,

    J'ai résolu le problème de compilation avec FPC 3.0.0 et le bug d'inversion verticale du texte (sous Windows). C'est dans la version 10.3.

    https://github.com/bgrabitmap/bgrabitmap/releases

    Est-ce que cela fonctionne pour toi aussi ?
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  17. #17
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par circular17 Voir le message
    Re,

    J'ai résolu le problème de compilation avec FPC 3.0.0 et le bug d'inversion verticale du texte (sous Windows). C'est dans la version 10.3.

    https://github.com/bgrabitmap/bgrabitmap/releases

    Est-ce que cela fonctionne pour toi aussi ?
    Oui, et encore oui , ça fonctionne sous Windows et avec mon Raspberry (pas encore essayé sous Ubuntu, mais je n'y vois a priori pas de problème).

    Un grand merci, tu as été d'une efficacité redoutable !

    Cordialement.

    Pierre

  18. #18
    Membre confirmé

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 132
    Points : 599
    Points
    599
    Par défaut
    Cool.

    Merci de m’avoir aidé à trouver le problème.
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

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

Discussions similaires

  1. [Lazarus] Création TBGRABitmap à partir d'un fichier ressource
    Par zaaryy dans le forum Lazarus
    Réponses: 2
    Dernier message: 04/06/2016, 20h05
  2. Obtenir un executable à partir d'un fichier *.m
    Par ArnaudFu13 dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/10/2012, 16h56
  3. [OpenOffice][Base de données] obtenir des courbes à partir d'un fichier de données
    Par barnouin dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 20/10/2009, 16h40
  4. Obtenir les champs d'une listbox à partir d'un fichier.
    Par daemon rom dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 21/08/2008, 13h05
  5. Réponses: 2
    Dernier message: 01/12/2005, 14h10

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