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

Langage Delphi Discussion :

Avoir la taille d'une image contenue dans une ImageList ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 88
    Points : 79
    Points
    79
    Par défaut Avoir la taille d'une image contenue dans une ImageList ?
    Bonjour à tous,
    Petite question : A t-on moyen de connaitre la taille d'une image contenue dans une ImageList, disons par exemple, si je veux connaitre la taille en pixel de l'image n° 4 ?
    Delphi 10.2 - Lazarus
    Utilisation de la VCL

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 256
    Points : 29 163
    Points
    29 163
    Billets dans le blog
    29
    Par défaut
    Bonjour,
    Citation Envoyé par docwiki
    TImageList représente une collection d'images de tailles identiques,
    donc les tailles sont celles indiquées par les propriétés Height et Width du composant.

    La problématique serait différente (mais le composant aussi) s'il y a prise en charge d'images hautes résolution
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre régulier

    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 88
    Points : 79
    Points
    79
    Par défaut
    SergioMaster,
    D'accord, mais dans un autre post nous avions vu que la taille max était de 24x24, du coup on peut aussi avoir des images de 16x16 par exemple au milieu et donc le Height et Width devraient alors changer pour donner la taille de chacune des images ce qui semble ne pas être le cas
    Delphi 10.2 - Lazarus
    Utilisation de la VCL

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

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

    Informations forums :
    Inscription : mars 2005
    Messages : 3 416
    Points : 10 041
    Points
    10 041
    Billets dans le blog
    6
    Par défaut
    Si j'en crois la documentation en ligne :
    All images in an image list are contained in a single, wide bitmap in screen device format.
    Autrement dit, j'imagine qu'ajouter une image qui ne soit pas aux dimensions attendues échouera (Add renvoie -1) ou l'image sera stockée dans ce Bitmap patchwork, adressé j'imagine comme un tableau, à la dimension commune et en perdant de vue sa taille d'origine.
    Delphi 5 Pro - Delphi 10.3.2 Rio 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 !

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 256
    Points : 29 163
    Points
    29 163
    Billets dans le blog
    29
    Par défaut
    Bonjour
    Citation Envoyé par patrice@ Voir le message
    D'accord, mais dans un autre post nous avions vu que la taille max était de 24x24
    Non, je ne crois pas qu'il y ait de restriction quant à la taille des images d'une TImageList (à moins que ce ne soit une question de débordement de variable).
    on peut aussi avoir des images de 16x16 par exemple au milieu et donc le Height et Width devraient alors changer pour donner la taille de chacune des images ce qui semble ne pas être le cas
    TImageList ne fonctionne pas comme ça. Il retaille les images en fonction de la taille indiquée.
    Par exemple :
    si vous mettez une image de 48x48 dans une TimageList de 24x24 une question est posée : "voulez-vous scinder en 4 images ?" si vous n'acceptez pas, l'image sera "condensée" en 24x24 entrainant, dans le cas d'images plus importantes une perte notable de définition
    Dans l'autre sens, si vous mettez une image 16x16 dans un TImagelist 24x24 cette image sera "pixelisée" pour obtenir une image 24x24 (pas flagrant mais quand même)
    C'est pour cela, entre autres, que sont apparus, dernièrement, les TImageCollection et TVirtualImageList (plus pour les problèmes de résolution d'écran que ce cas très particulier)
    À mon avis, si vous voulez mêler différentes tailles d'images sans peine il vaut mieux passer par les ressources
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  6. #6
    Membre régulier

    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 88
    Points : 79
    Points
    79
    Par défaut
    Bonjour,
    J'utilise l'imageList de la VCL.
    J'utilise une image de l'imageList (un simple carré rouge) que je mets dans une cellule d'une StringGrid et j'aimerai avoir la taille de cette image pour pouvoir mettre le ColWidths de la colonne à la bonne taille afin de voir l'image correctement.
    D'où mon idée d'avoir la taille de l'image ... (tiens ça me donne l'idée d'une nouvelle recherche ... car comment savoir si une cellule a une image dedans ou pas ?)
    Delphi 10.2 - Lazarus
    Utilisation de la VCL

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 256
    Points : 29 163
    Points
    29 163
    Billets dans le blog
    29
    Par défaut
    Citation Envoyé par patrice@ Voir le message
    J'utilise l'imageList de la VCL.
    je l'avais bien compris

    J'utilise une image de l'imageList (un simple carré rouge) que je mets dans une cellule d'une StringGrid et j'aimerai avoir la taille de cette image pour pouvoir mettre le ColWidths de la colonne à la bonne taille afin de voir l'image correctement.
    ImageList.Width, soit Stringrid1.ColWidths[1]:=Imagelist1.Width;
    D'où mon idée d'avoir la taille de l'image
    Il n'y a pas à tortiller cela reste la taille définie par les propiétés du TImageList
    (tiens ça me donne l'idée d'une nouvelle recherche ... car comment savoir si une cellule a une image dedans ou pas ?)
    AMHA pas moyen
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 886
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 886
    Points : 10 521
    Points
    10 521
    Par défaut
    Citation Envoyé par patrice@ Voir le message
    J'utilise une image de l'imageList (un simple carré rouge) que je mets dans une cellule d'une StringGrid et j'aimerai avoir la taille de cette image pour pouvoir mettre le ColWidths de la colonne à la bonne taille
    L'ImageList est une bibliothèque d'images de taille fixe. Si à l’insertion l'image ne correspond pas, elle est ajustée (stretch-ée, rognée, centrée) pour tenir dedans. Toutes les images ont la même hauteur/largeur.

    Citation Envoyé par patrice@ Voir le message
    afin de voir l'image correctement.
    Correctement ici (avec une ImageList) veut dire dans le même rapport hauteur/largeur que l'image d'origine mais pas forcément à la même résolution.

    Citation Envoyé par patrice@ Voir le message
    comment savoir si une cellule a une image dedans ou pas ?
    Pour ça, il faudrait que la cellule ait une propriété Picture. Ce qui se fait par Draw n'est pas identifiable.

  9. #9
    Expert éminent
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    3 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 3 217
    Points : 7 224
    Points
    7 224
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    l'image sera stockée dans ce Bitmap patchwork
    Elle s'appelle un atlas (ou texture atlas) (<- lien wiki en anglais) et c'est utilisé essentiellement dans les jeux vidéos pour éviter de faire trop de chargements.
    J'avais mis en place un atlas avec Embarcadero XE/ XE6 avec la bibliothèque Graphics32 parce qu'on avait accès à la "scanline" avec le type TImage32 (image_view->Bitmap->ScanLine[ ]) pour recopier l'image le + rapidement possible ... tout en respectant la transparence avec la couleur du fond (petit calcul qu'on trouve facilement)

    C'est aussi utiliser dans le développement Web (Google le fait pour la page google) mais très peu parce qu'il faut pouvoir contraindre son image en longueur et en largeur afin de ne pas déborder (en Web on recopie et on boucle sur l'image (<- propriété CSS) tant que c'est nécessaire)

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    11 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 11 463
    Points : 19 710
    Points
    19 710
    Par défaut
    Les Styles VCL n'utiliserait pas aussi un "texture atlas" ?

    Sinon, il faudrait peut-être utilisé autre chose qu'une ImageList si patrice@ souhaite des images de taille variable aux formats variés
    Les Ressources devraient être adaptée pour stocker plusieurs images de taille variable servant de sprite

    Si il y a peu de résolution différente comme juste 16x16 et 24x24, deux images ImageList feront bien le travail
    C'est utile avec des applications que l'on zoom avec ScaleBy, remplacer l'ImageList courante pour avoir des icones plus grand et propre

    En tout cas, ce sujet semble bien simple dans le fond mais inutilement complexifié, la même chose dans "Coordonnées exactes du bord d'une cellule d'un StringGrid", faudrait un peu se poser et au lieu de perdre du temps à écrire sur le forum, essayez d'approfondir la manipulation des composants VCL et Canvas
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Forcer la taille de x image contenu dans une class
    Par mael94420 dans le forum jQuery
    Réponses: 2
    Dernier message: 12/06/2009, 07h55
  2. est ce qu on peu dimensionner une Image contenu dans un Jlabel
    Par uzumaki_naruto dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 24/02/2007, 17h33
  3. Dimension d'un control Image contenu dans une Frame
    Par avigeilpro dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 08/07/2006, 16h55
  4. Réponses: 6
    Dernier message: 29/07/2005, 12h12
  5. [JAR] instancier une Image contenue dans un jar
    Par celine31 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2005, 16h55

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