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 :

Lenteur d'ouverture des fichiers images


Sujet :

Lazarus Pascal

  1. #1
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut Lenteur d'ouverture des fichiers images
    Bonjour à tous.

    Après de longues années Delphi (version 4 puis 7), je programme depuis peu sous Lazarus pour environnement Windows (principalement).
    Je n'ai pas en m'en plaindre, excepté la programmation graphique et plus spécifiquement l'ouverture de fichiers.
    Quelle lenteur par rapport avec ce que faisais en Delphi !

    Sous Delphi :
    - ouverture des bmp par la procédure native de TBitmap.
    - pour les jpeg, utilisation de ijl.pas avec dll associée (beaucoup plus rapide que l'ouverture par TJpegImage).
    - utilisation de GraphicEx pour les autres extensions : tif, psd, png...
    Résultat : un fichier de 20 millions de pixels s'ouvre et s'affiche presque à la vitesse de l'éclair (surtout les jpeg).

    Sous Lazarus, après avoir essayé les composants intégrés et d'autres librairies (imaging...), mon choix s'est porté sur la librairie BGRABitmap.
    Excellent: propriété Scanline très rapide, alphablending, filtres, dessin antialiasing... Bref, je la recommande à tous.

    Le bémol, mais il est de taille : l'ouverture des fichiers est beaucoup plus lente. BGRABitmap, à mon avis, n'est pas en cause (il utilise les reader et writer).
    Cela vaut pour tous les types de fichiers.
    Ouvrir un psd (photoshop) : cela marche, mais vous avez le temps de prendre un café !

    Vous allez me dire que la lenteur d'ouverture d'un fichier n'a qu'une faible importance dans un logiciel de traitement graphique, mais elle en a beaucoup dans un Viewer.

    Mes questions :
    1) avez-vous trouvé une bibliothèque plus rapide ?
    2) l'unité ijl.pas peut-elle être adaptée pour Lazarus ? (j'avoue ne pas avoir encore testé)
    3) malgré plusieurs download de GraphicEx soit disant adaptée pour Lazarus, impossible de la compiler (même en modifiant pas mal de choses).

    Je vous remercie d'avance.
    Cordialement.

    Thierry

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Pour mieux comprendre le codage, j'ai réalisé sous Delphi un décodeur jpeg, qui s'est révélé d'une lenteur à toute épreuve...

    J'ai utilisé ijl.pas sous Delphi 5, et il fonctionne encore sous XE2 avec quelques aménagements.

    Il ne doit donc pas être si facile de l'adapter sous Lazarus, qui introduit une couche supplémentaire indépendante de l'OS pour représenter l'image.

    Et les dernières versions des IPP d'Intel ne sont pas libres, à la différence semble-t-il des FrameWave d'après AMD.

    Le mieux est pê finalement d'investir dans une machine qui fait du bon café et permettra de patienter agréablement !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonsoir tourlourou, et merci pour ta réponse.

    Concernant la machine à café, j'hésite encore entre deux marques

    Thierry

  4. #4
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour à tous.

    Concernant l'ouverture des fichiers Jpeg, je suis parvenu à utiliser la dll ijl15 sous Lazarus.

    - utilisation de ma "vieille" dll de Intel (2001)
    - peu de modifications dans ijl.pas : modification des déclarations des fonctions external.
    - j'ai écrit l'unité loadjpeg.pas (qui sert d'unité " d'entrée ") en partant du code de Sylvain Taufour (unité Delphi IJpeg.pas) auquel j'adresse de vifs remerciements, pcq j'aurais eu beaucoup de mal à implémenter les Channels ainsi que la section DIB.

    Compilé sous Lazarus v1.2.4 (32bits)
    Testé sous Windows 7 et 8.1 (64bits)

    Le décodage du jpeg et la copie de l'image sur un TBitmap : jusqu'à 7 x plus rapide qu'avec le reader Lazarus.
    Pour une photo de 20 millions de pixels : environ 200ms vs 1400ms.

    Utilisation très simple :
    copiez les 3 fichiers contenus dans le zip dans le répertoire de votre application.
    IJL.zipIJL.zip

    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
     
    uses loadjpeg;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Bmp: TBitmap;
    begin
       if opendialog1.execute then
       begin
           Bmp:= TBitmap.Create;
           try
               if DecodeJpeg(UTF8ToSys(opendialog1.FileName), bmp) = 0  then   // pas d'erreur
                   // affichage sur un canvas
                  // ou image1.picture.bitmap.assign(bmp);
           finally
                bmp.free;
           end;
       end;
    end;
    Thierry

Discussions similaires

  1. Modification de la taille des fichiers image
    Par GBAGO dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/08/2007, 10h16
  2. [AIX] lenteur d'ouverture de fichier
    Par ludocey42 dans le forum AIX
    Réponses: 2
    Dernier message: 31/07/2007, 09h17
  3. [VBA-E] Masquer l'ouverture des fichiers
    Par alsimbad dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 14/02/2007, 16h32
  4. Ouverture des fichiers .bin
    Par Fredo02 dans le forum Autres Logiciels
    Réponses: 16
    Dernier message: 11/01/2007, 18h26
  5. Recherche d'un SGBG pour la gestion des fichiers images !
    Par PandaConstantin01 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 04/09/2006, 13h53

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