PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 05-09-2008 13:29:31

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

[RESOLU] Optimisation de la gestion des images

Bonsoir,

J'ai parcouru divers sujets du forum et je me suis aperçu qu'ils y avait différentes façons de gérer les images :
- on peut utiliser le "Display as picture" si une colonne d'une DW affiche le chemin d'accès
- on peut utiliser un computed field dans lequel on reconstruit le chemin absolu et on utilise des fonctions d'images telles bitmap()
- on peut changer la résolution de l'image
- on peut obtenir la résolution d'une image en la pré-chargeant dans un control invisible
- ...

Mon cas est assez classique : je vais obtenir des chemin d'accès à des images depuis ma base de données. J'obtiendrai environs 100 rows, et pour chaque row une colonne me permettra d'obtenir totalement ou partiellement le chemin d'accès absolu au fichier image qui doit être affiché.
Le point positif, c'est que je n'affiche qu'un seul row à la fois : je passe au row précédant/suivant lorsque l'utilisateur appuie sur la flèche haut/bas du clavier.

Le but du jeu c'est d'afficher le plus rapidement possible ces images haute-résolution lorsque l'utilisateur change de row. Etant donné que c'est la première fois que je vais "jouer" avec des images, et étant donné des contraintes de temps de réponse drastiques, j'aurais souhaité bénéficier de vos conseils - ô combien précieux - pour optimiser la gestion de mes images, et plus particulièrement réduire à son minimum le temps d'affichage lors d'un changement de row

Par exemple : cela vous paraitrait-il judicieux si je disposais de 3 champs images : l'un qui afficherait l'image du row, et lorsque celle-ci serait affichée alors je chargerai les row-1 et row+1 dans les deux autres champs image invisibles ? En changeant de row, il me suffirait alors d'afficher l'image+1 ou l'image-1 si elle est déjà chargée. Bien entendu beaucoup de zones floues demeurent : que se passe-t-il si l'utilisateur change de row pendant le chargement des images invisibles ?

Bref, en somme, je suis ouvert à tout conseil et suggestion sur le sujet

Dernière modification par Nyphel (10-09-2008 09:13:45)

Hors ligne

 

#2 05-09-2008 16:03:03

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Optimisation de la gestion des images

Bonjour Nyphel,

Je viens de tester l'affichage d'images dans un picture control.
j'ai créer une datawindows affichant des chemins pointant sur des images (BMB de 20Mo).

Lorsque je sélectionne la ligne avec flêche ou en cliquant, j'affiche l'image correspondant au chemin sélectionner.
Les temps de réponse son très bons sans avoir à charger les images précédentes et suivantes. D'autant que si l'utilisateur utilise la souris, le chargement ne sert à rien.

Hors ligne

 

#3 08-09-2008 07:01:57

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Optimisation de la gestion des images

Ah oui bien vu pour la souris ;-)

Pour ma part j'avais fait un petit test avec des jpeg de 500Ko, et le temps de réponse était inférieur à 1s. A voir, à voir...

Hors ligne

 

#4 08-09-2008 07:04:11

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Optimisation de la gestion des images

Bonjour,

J'ai eu résoudre exactement le même problème que toi avec les mêmes questions.

Display as picture : les images doivent se trouver en local dans un répertoire du poste. Elles doivent donc être déployées avec l'application ou extraite de la base de données pour être écrite dans un répertoire local du poste.
Le premier cas présente l'inconvénient d'être statique et ne permet pas la mise à jour éventuelle des images par l'utilisateur. Le second cas plus souple présente l'inconvénient d'être long si les images sont lourdes ( en PB 9, sauvegarde de l'image par bloc de 32K ...).

Bitmap avec computed field : abandon (de souvenir), il n'est pas possible de conserver la proportion des images à l'affichage

La solution retenue : j'utilise en fait le contrôle active X GFLAx (http://www.xnview.com) avec stockage des images dans une colonne de type blob de la base de données. Il me permet de travailler l'image directement en mémoire sans passer par une étape d'écriture sur le poste local. Il est extrêmement performant pour rééchantillonner l'image pour un aperçu (temps réel quasiment). l'image est affichée dans un picture control.

Pour accélérer les choses, il est également possible de stocker l'aperçu de l'image dans une autre colonne de la base de données pour limiter la taille des flux échangée sur le réseau (solution retenue par la partie web de l'application).

Mon application permet également d'afficher un aperçu de l'image sur une URL externe.

Dans l'image çi-dessous, tu constateras que la problématique est exactement la même que la tienne, je dois passer à l'article suivant ou précédent en cliquant sur le spin control du code article ou du libellé de l'article.

http://bucaille.chez-alice.fr/pbadonf/article.jpg

Les fonctionnalités très étendu de GFLAx te permettent également d'ajouter d'autres fonctionnalités à l'application (ex : de modifier l'image pour insérer un copyright, demande de la part de client car ces images sont synchronisées avec une application web).

Suite à une autre question sur le forum sur la façon d'afficher un aperçu de l'image en conservant les proportions, j'ai commencé à extraire l'user object de mon application pour créer une application exemple pour la mettre à disposition.

Hors ligne

 

#5 08-09-2008 07:21:07

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Optimisation de la gestion des images

Merci beaucoup pour tous ces détails !

J'ai pu obtenir quelques précisions concernant ma gestion des images :
- en base de données j'aurai simplement le chemin d'accès vers les images (je n'ai donc pas d'images stockées en BLOB dans ma base de données)
- mes images seront probablement accessible via le réseau, sur un serveur distant des clients PB
- j'ai besoin de conserver la proportion de mes images, mais je dois aussi limiter leur affichage à un cadre précis

Cet activeX me semble fort intéressant, mais n'en ayant jamais utilisé je dois me renseigner sur le sujet et notamment sur les droits (Je travaille sur une application qui n'est pas libre de droits).

Merci encore pour toutes ces précieuses informations

Hors ligne

 

#6 08-09-2008 14:33:56

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Optimisation de la gestion des images

[HS]
TRES JOLI ECRAN BUCK !
[FIN HS]


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#7 10-09-2008 06:47:01

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Optimisation de la gestion des images

Pour informations, le contrôle activeX GFLAx est sous licence pour une utilisation commerciale :

La version light SDK est à 100€ pour 1 licence 1OS/10formats, sans conditions particulières.
La version standard est à 300€ avec un agrément de licence à signer.

Hors ligne

 

#8 10-09-2008 09:13:28

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Optimisation de la gestion des images

Le sujet n'est plus d'actualité : le client impose l'utilisation d'une DLL qui va décrypter les images et les afficher automatiquement dans ma fenêtre (Je transmets l'identifiant Windows de la fenêtre à la fonction). Du coup je n'ai plus aucun contrôle sur l'affichage des images, si ce n'est leur position dans la fenêtre. Enfin, le fait que les images soient cryptées va considérablement alourdir leur chargement.

Merci tout de même, j'avoue que cette petite discussion m'a fortement intéressé !

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22