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 :

Compatibilité multi-platefomes de BitMaps : problème sous gtk2


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Par défaut Compatibilité multi-platefomes de BitMaps : problème sous gtk2
    Salut tout le monde

    Sans utiliser d'autres librairies telles que aggpas ou bgrabitmap ou gr32... quelle est la bonne manière multi-plateforme pour charger une image du disque et l'afficher sur un TCanvas ?! Sur Windows il n'y a pas de problème, par contre sur un système *nux gtk2 l'image s'affiche, mais toute grise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.FormPaint(Sender: TObject);
    var
      bmp: TBitmap;
    begin
      bmp := TBitmap.Create;
      try
        bmp.LoadFromFile('test.bmp');
        Canvas.Draw(0, 0, bmp);
      finally
        bmp.Free;
      end;
    end;
    Quelqu'un a-t-il déjà rencontré ce problème ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Salut,

    et bonne année bonne santé tout ce genre de choses (oui, ça se dit en cette saison...)

    Et donc ton code fonctionne parfaitement bien sous Debian Wheezy 7.1 / 32bits dans l'IDE Lazarus 1.0.10. et pas du tout hors de l'IDE : fenêtre toute grise et par dessus une boîte de message d'erreur (je suppose) toute grise aussi.

    Bon, y a un piège : fonctionner dans l'IDE ou hors de celui-ci = problème de chemin, l'exe ne trouve pas le fichier (ne me demande pas pourquoi).

    La solution qui fonctionne dans les deux cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bmp.LoadFromFile(ExtractFilePath(Application.ExeName) + 'test.bmp');
    Maintenant, perso, je trouve bizarre de mettre ce genre de chargement d'image dans FormPaint, ça doit être appelé un tas de fois cette procédure...

  3. #3
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Oui ça pourrait bien être un problème de chemin, mais attention "La solution qui fonctionne dans les deux cas" n'est pas valide au sens de la politique système (debian policy) sous Debian et d'autres Linux. Si le programme doit être un jour diffusé, cela peut être gênant.

    Les fichiers exécutables doivent être dans /usr/bin mais on ne doit pas y mettre des fichiers de données genre bmp.

    La seule solution que j'ai trouvée est d'assigner le dossier de manière différente selon les systèmes avec tests sur une directive de compilation.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {$ifdef DEBIAN}
      DIR_DATA := '/usr/share/'+Application.Title;
    {$else}
     DIR_DATA := ExtractFilePath(Application.ExeName);
    {$endif}

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Par défaut
    Désolé les amis, Bonne année à tout le monde

    Citation Envoyé par Jipété Voir le message
    Maintenant, perso, je trouve bizarre de mettre ce genre de chargement d'image dans FormPaint, ça doit être appelé un tas de fois cette procédure...
    Tout à fait d'accord avec toi, ce n'est qu'un exemple écrit comme ça à la volée En faite l'image est déjà chargé au lancement de l'application et stocker en mémoire.

    Citation Envoyé par Jipété Voir le message
    Bon, y a un piège : fonctionner dans l'IDE ou hors de celui-ci = problème de chemin, l'exe ne trouve pas le fichier (ne me demande pas pourquoi).
    Citation Envoyé par tintinux Voir le message
    Oui ça pourrait bien être un problème de chemin
    Non le problème, n'est pas un problème de chemin, l’image et visible sur le canevas, seulement qu'elle est toute grise et avec une mauvaise qualité sous GTK2 .

    je viens de tester le même code sous diverse distributions, le problème se pose seulement avec GTK2 et c'est à cause du TBitmap natif du Widget je pense
    avec Win32, Customdrawn ou QT y'as pas de problème... peut-être que je dois passer par un TLazIntfImage !?!!

    Si quelqu'un peut me faire montrer comment charger une image depuis le disque et l'afficher sur un canevas quelconque à l'aide de fpimage et IntfGraphics si c'est possible

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Yep !
    Citation Envoyé par tintinux Voir le message
    Oui ça pourrait bien être un problème de chemin, mais attention "La solution qui fonctionne dans les deux cas" n'est pas valide au sens de la politique système (debian policy) sous Debian et d'autres Linux. (...)
    Ça me gonfle ces trucs !
    Et si j'ai un .conf faut le mettre dans /etc ?
    Sous Wxx/D7, j'ai toujours mis l'ini avec l'exe, et hop !
    Surtout pour des bricoles, des machins de tests, c'est de la prod perso.

    Citation Envoyé par J_apprenti Voir le message
    (...) Non le problème, n'est pas un problème de chemin, l’image et visible sur le canevas, seulement qu'elle est toute grise et avec une mauvaise qualité sous GTK2 .

    je viens de tester le même code sous diverse distributions, le problème se pose seulement avec GTK2 et c'est à cause du TBitmap natif du Widget je pense
    avec Win32, Customdrawn ou QT y'as pas de problème... peut-être que je dois passer par un TLazIntfImage !?!!
    Et pourquoi chez moi c'est tout bon ? Résultat de la commande dpkg -l gtk* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
    | État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
    |/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
    ||/ Nom                                 Version                Architecture           Description
    +++-===================================-======================-======================-===========================================================================
    ii  gtk2-engines:i386                   1:2.20.2-2             i386                   theme engines for GTK+ 2.x
    un  gtk2.0-binver-2.10.0                <aucun>                                       (aucune description n''est disponible)
    un  gtk3-binver-3.0.0                   <aucun>                                       (aucune description n''est disponible)
    un  gtkam
    gtk2, donc ?

    Je n'ai utilisé aucun composant (ou alors un TImage de base, pour voir si ça fonctionnait aussi).

  6. #6
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Citation Envoyé par JiPété
    Et si j'ai un .conf faut le mettre dans /etc ?
    Désolé, il faut utiliser Utf8ToSys(GetAppConfigFile(False|True) !
    Oui, d'accord, c'est gonflant, mais bien sûr c'est seulement nécessaire si tu veux diffuser.

    Et pour en revenir au sujet, il me semble, de mémoire, qu'il faut mieux passer par une TPaintBox, et sûrement pas la charger durant le OnPaint.

Discussions similaires

  1. Compatibilité IE vs FF (Problèmes sous FF !)
    Par oranocha dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/10/2007, 00h13
  2. [pg_restore]Problème sous windows
    Par tanatiel dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/09/2005, 15h16
  3. [Eclipse 2.0]Problème sous eclipse
    Par anamoush dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 08/03/2005, 16h19
  4. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  5. RegCreateKeyEx me pose des problèmes sous XP
    Par Morgatte dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 08/07/2004, 05h28

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