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
    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

    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, Sidney) 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
    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

    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

    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, Sidney) 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
    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

    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, Sidney) 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

    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
    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
    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

###raw>template_hook.ano_emploi###