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

WinDev Discussion :

Est-il possible d'afficher les miniatures des images au lieu de les charger complètement ? [WD19]


Sujet :

WinDev

  1. #1
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Points : 163
    Points
    163
    Par défaut Est-il possible d'afficher les miniatures des images au lieu de les charger complètement ?
    Bonjour à tous,

    Dans une ListeImage je charge des... images. Elles sont grosses et l'affichage à l'initialisation est long.
    Je n'ai pourtant pas mis "mode HQ". Quoique je pourrais puisque le temps est quasi le même...
    Je constate une nette différence de vitesse entre l'affichage dans ma liste, et l'affichage des miniatures dans l'explorateur.
    Aussi, est-il possible d'afficher dans ma liste images uniquement des miniatures ?
    En effet j'imagine que windev charge chaque image une par une et m'en fait un homothétique centré.
    Y a-t-il moyen de feinter la bête ?

    Nom : photos.jpg
Affichages : 1684
Taille : 183,4 Ko

    Amicalement,

    Eric.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Slt ERIC
    Très sincèrement, je ne pense pas.
    Pour que windev puisse faire une miniature, il faut qu'il est analysé ton image dans tous les cas.
    Pourquoi ne pas la produire toi même cette miniature et l'utiliser dans ta liste plutôt que l'image originale ?
    Les solutions les plus simples sont les plus efficaces

  3. #3
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Points : 163
    Points
    163
    Par défaut
    Merci pour la réponse. Décevante mais qui a le mérite d'être franche
    Quand tu dis "générer ma miniature moi-même", qu'entends-tu par là ?
    Au moment où je fais "flistefichier *.jpg", je dois : charger l'image, la resizer, l'enregistrer et l'afficher dans la liste ?
    Ce sera forcément plus long non ? Vu qu'il faut la charger..
    Entendons-nous bien, ce problème n'en est pas vraiment un gros, c'est juste au cas où il y aurait moyen de faire mieux.

    Amicalement,

    Eric.

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 208
    Points : 9 212
    Points
    9 212
    Par défaut
    Ce que font les "afficheurs de miniatures", c'est au moment de parcourir le dossier, ils vont voir s'il existe une miniature dans un répertoire caché. Si elle n'existe pas, il la crée.

    Dans ton cas, quand l'utilisateur charge une image dans le logiciel, tu génères cette miniature les fonctions dessin (dessin caché).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Pour faire ça j'utilise la vignette EXIF qui est stockée dans l'image
    Cette miniature est stockée dans l'image par tous les appareils photos

    Et du coup son chargement est beaucoup plus rapide que de lire l'image elle même
    Et au pire si la vignette EXIF n'existe pas je charge l'image complète

    Je fais quelque chose comme ça :

    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
    W_bufImg est un Buffer
    W_imgPhoto est une Image
     
    // P_cImg est le nom complet de la photo
    W_bufImg = ImageInfoValeur(P_cImg, imgVignette)
    ImageInfoFerme(P_cImg)
     
    SI W_bufImg <> "" ALORS
       // Affectation de la vignette EXIF à un champ image
       Img_Test = W_bufImg
    SINON
       // Pas de vignette EXIF, on charge l'image
       // Je passe par une variable image pour pouvoir récupérer facilement les propriétés de l'image (..Largeur, ..Hauteur etc)
       W_imgPhoto = dChargeImage(P_cImg)
       Img_Visu = W_imgPhoto
    FIN

  6. #6
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Points : 163
    Points
    163
    Par défaut
    Merci pour vos réponses les gars.
    Hpascal, j'ai testé ton code et il est très prometteur.

    J'ai fait ceci (j'explique en dessous)

    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
    sListeFichiers est une chaîne = fListeFichier(ArbreRécupèreIdentifiant(ARBRE_Photos,ArbreSelect(ARBRE_Photos))+"*.*",frNonRécursif)
    	POUR TOUTE CHAÎNE sCheminFichier DE sListeFichiers SÉPARÉE PAR RC
    		Extension est une chaîne = Minuscule(Milieu(fExtraitChemin(sCheminFichier,fExtension),2))
    		SI Extension="jpg" OU Extension="jpeg" ALORS
    			W_bufImg est un Buffer
    			W_imgPhoto est une Image
    			W_bufImg = ImageInfoValeur(sCheminFichier, imgVignette)
    			ImageInfoFerme(sCheminFichier)
    			SI W_bufImg <> "" ALORS
    				W_imgPhoto=W_bufImg
    				dSauveImageJPEG(W_imgPhoto,fRepExe()+"\min.jpg")
    				ListeAjoute(LSI_Images,fExtraitChemin(sCheminFichier,fFichier)+"."+Extension,fRepExe()+"\min.jpg")
    			SINON
    				ListeAjoute(LSI_Images,fExtraitChemin(sCheminFichier,fFichier)+"."+Extension, sCheminFichier)
    			FIN
    		FIN
    	FIN
    1. Dans mon ListeAjoute, je crois que je ne peux pas mettre d'image (dans le sens "variable image"), il faut une chaine de caractère qui pointe vers le fichier image. Vrai ou Faux ?
    2. Si je mets "IMG_MaMiniature"=W_bufImg alors quand je lance l'appli, je vois bien toutes mes miniatures défiler dans le champ IMG_MaMiniature donc ca fonctionne.
    3. Mon code ne fonctionne pas car il exécute tout le code avant d'afficher le résultat donc toutes mes vignettes ont la même valeur vu mon code. Je suis obligé de créer un répertoire temporaire avec toutes les vignettes et je supprime son contenu après le traitement ?

    Merci en tous cas.. je ne connaissais pas la vignette EXIF !

    Amicalement,

    Eric.

  7. #7
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Dans une liste je ne sais pas et là je n'ai pas trop le temps de tester

    Moi j'utilise une zone répétée qui permet de faire beaucoup mieux qu'une liste
    Et avec ZoneRépétéeAjouteLigne, dans un champ image de la zone répétée, on peut utiliser un buffer ou le chemin de la photo

    Du coup plus besoin d'enregistrer la vignette, tu peux utiliser directement W_bufImg

  8. #8
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Points : 163
    Points
    163
    Par défaut
    Merci de tes conseils, au final j'ai fait comme ceci :

    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
    sListeFichiers est une chaîne = fListeFichier(ArbreRécupèreIdentifiant(ARBRE_Photos,ArbreSelect(ARBRE_Photos))+"*.*",frNonRécursif)
    	POUR TOUTE CHAÎNE sCheminFichier DE sListeFichiers SÉPARÉE PAR RC
    		Extension est une chaîne = Minuscule(Milieu(fExtraitChemin(sCheminFichier,fExtension),2))
    		SI Extension="jpg" OU Extension="jpeg" ALORS
    			W_bufImg est un Buffer
    			W_imgPhoto est une Image
    			W_bufImg = ImageInfoValeur(sCheminFichier, imgVignette)
    			ImageInfoFerme(sCheminFichier)
    			SI W_bufImg <> "" ALORS
    				W_imgPhoto=W_bufImg
    				dSauveImageJPEG(W_imgPhoto,gsRepPhotosVignettes+fExtraitChemin(sCheminFichier,fFichier+fExtension))
    				ListeAjoute(LSI_Images,fExtraitChemin(sCheminFichier,fFichier)+"."+Extension, gsRepPhotosVignettes+fExtraitChemin(sCheminFichier,fFichier+fExtension))
    			SINON
    				ListeAjoute(LSI_Images,fExtraitChemin(sCheminFichier,fFichier)+"."+Extension, sCheminFichier)
    			FIN
    		FIN
    	FIN
    Je stocke les vignettes dans un répertoire temporaire que je nettoie à chaque fois. ET c'est très rapide vraiment merci. Ca me charge l'affichage 50 photos qui font 3Mo chacune en moins de 2 secondes.

    Pour l'instant je reste sur la listeimage car je me suis donné un mal de chien à paramétrer le drag & drop...

    Quand j'aurai du temps j'essaierai avec une ZR

    Merci en tous cas.

    Amicalement,

    Eric.

  9. #9
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 346
    Points : 163
    Points
    163
    Par défaut
    Re,

    J'ai essayé avec une ZR.
    L'affichage fonctionne nickel comme tu avais dit.
    Par contre c'est galère pour gérer le drag & drop sur des champs image.. alors je laisse tomber et garde la listeimage.
    Amicalement,

    Eric.

  10. #10
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    C'est sur la ZR qu'il faut gérer le drag&drop
    Ensuite tu récupères la cellule concernée avec ZoneRépétéeInfoXY

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2012, 12h36
  2. Réponses: 8
    Dernier message: 01/07/2009, 23h29
  3. Est ce possible d'afficher les accents??
    Par Bebert71 dans le forum GLUT
    Réponses: 15
    Dernier message: 28/04/2009, 17h35
  4. Réponses: 7
    Dernier message: 25/11/2008, 01h30
  5. [RichEdit] Est-il possible d'afficher le numéro des lignes ?
    Par Invité dans le forum Composants VCL
    Réponses: 17
    Dernier message: 17/04/2008, 17h56

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