Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Puisque vous avez été hyper bons sur mon dernier post...
Connaissez-vous un moyen simple de récupérer hauteur et largeur d'un fichier image sans (avant) de le charger dans un picture control ?
actuellement, j'utilise une ruse de barbare : charger l'image dans un picture control caché et puis je récupère width et height du picture control en pbunits. En fonction de cela, je continue mon traitement (affichage en réduction en respectant le rapport H/L) mais ce système barbare est mauvais en perf.
Les grosses images font ramer l'ordi au bout d'une dizaine d'affichages car j'ai l'impression que PB ne réinitialise pas correctement la zone mémoire utilisée pour charger l'image de taille réelle dans le picture control caché.
J'ai regardé sur le web mais les ocx de traitement d'image sont tous payants.
J'avais aussi vu que certains utilisent la fonction windows utilisée dans l'explorateur pour afficher la taille de l'image (colonne dimensions) mais je n'ai pas trouvé d'exemple utilisable.
Une soluce les amis ?
Hors ligne
Bonjour, il y avait un post (que je ne retrouve pas) ou la solution a été :
frichmout a écrit:
une ruse de barbare : charger l'image dans un picture control caché et puis je récupère width et height du picture control en pbunits. En fonction de cela, je continue mon traitement (affichage en réduction en respectant le rapport H/L) mais ce système barbare est mauvais en perf.
c'est vrai que cette méthode (avec une API windows) serait meilleure :
frichmout a écrit:
J'avais aussi vu que certains utilisent la fonction windows utilisée dans l'explorateur pour afficher la taille de l'image (colonne dimensions) mais je n'ai pas trouvé d'exemple utilisable.
récup dimensions en pixels et conversion en PBunits
Hors ligne
Ton système barbare me parait très bien.
Pour les bmp, tu peux récupérer la largeur à l'offset 18 du fichier (c'est un entier sur 4 octets), et la longueur à la suite c'est à dire à l'offset 22
http://www.teamsybase.com/roy.kiesler/d … eutils.zip
Hors ligne
Hors ligne
sinon en DOT.NET (PB11)
#IF DEFINED PBDOTNET THEN System.Drawing.Image lo_image lo_image = System.Drawing.Image.FromFile( ls_filepath ) ll_Height = lo_image.Height ll_Width = lo_image.Width #END IF
Hors ligne
Hors ligne
erasorz a écrit:
sinon en DOT.NET (PB11)
Code: pb
#IF DEFINED PBDOTNET THEN System.Drawing.Image lo_image lo_image = System.Drawing.Image.FromFile( ls_filepath ) ll_Height = lo_image.Height ll_Width = lo_image.Width #END IF
ça marche pas
Hors ligne
les file header, ça me plait bien, c'est de ma génération !! (on n'arrêtait pas d'aller trifouiller dans les file header en clipper !!!)
et puis ça doit être bien péchu.
Je vais faire ça. De toutes façons, je suis en PB10 donc la solution .NET ne semble pas s'appliquer.
Merci erazorz !
PPP (Pierre, the Powerbuilder Papy*)
* 50 ans, grand père depuis un an maintenant......
Hors ligne
frichmout a écrit:
les file header, ça me plait bien......
C'est exactement ce qui est fait par Roy Kiesler dans le lien que j'ai fournit
Hors ligne
shahin a écrit:
frichmout a écrit:
les file header, ça me plait bien......
C'est exactement ce qui est fait par Roy Kiesler dans le lien que j'ai fournit
à part que le lien ne marche pas
Hors ligne
Désolé
comme je ne peux télécharger aucun zip chez mon client, je n'ai pas pu tester
Hors ligne
Personnellement, pour cela, j'utilise le contrôle active X GFLAx (GFLAx).
Il te permet de charger l'image et de la redimensionner de façon très performante l'image en mémoire selon la taille de l'aperçu désiré. Tu récupères l'image retaillé dans un blob que tu affiches dans un picture control.
Hors ligne
Bonjour et buck !
As-tu un petit script avec un exemple d'appel ?
Hors ligne
Merci pour ce code, je ne pense pas assez souvent à utiliser le Framework .net !
Cela fonctionne très bien en PB12.5, bien mieux que la propriété OriginalSize d'un picturecontrol avec chargement dynamique d'image !
Edit : rectification, on arrive pas à récupérer les valeurs de Width et Height, quelqu'un a une idée ?
Merci
erasorz a écrit:
erasorz a écrit:
sinon en DOT.NET (PB11)
Code: pb
#IF DEFINED PBDOTNET THEN System.Drawing.Image lo_image lo_image = System.Drawing.Image.FromFile( ls_filepath ) ll_Height = lo_image.Height ll_Width = lo_image.Width #END IFça marche pas
Dernière modification par Ben53 (21-05-2012 10:14:56)
Hors ligne