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

Composants VCL Delphi Discussion :

Comment afficher un Bitmap contenant une couche alpha ?


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Comment afficher un Bitmap contenant une couche alpha ?
    Je souhaiterai afficher une image bitmap contant un "alpha channel".
    Avez vous un code à me proposer ou une fonction toute jolie de l'api ou je ne sais quoi ?
    Merci

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Bonjour et bienvenue sur Développez.com

    Un des composants images de la JVCL doit pouvoir faire ça. Mais je n'en suis pas sûr.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Il y avait eu un topic sur le sujet à un moment, mais je n'arrive plus du tout à le retrouver (un posteur qui devait afficher des dizaines et des dizaines de bitmaps transparents en évitant les scintillements, ça rappelle quelque chose à quelqu'un ?)

    La solution était partie vers un TBitmap32 de je ne sais plus quelle collection de composants. Un coup de main pour la mémoire SVP ! ;-)
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    @Mac LAK Tu parles surement de la librairie Graphics32 qui permet de gérer les Bitmap 32 bits.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Un bitmap 24 bits avec une couche alpha 8 bits est un PNG (image 32 bits).
    Note : Un masque en 16 bits est possible aussi...
    Voici une démo (avec sources) qui permet de décomposer l'image et de changer sa teinte...
    Tu trouveras les fonctions nécessaires pour l'affichage de l'image :

    http://sub0.developpez.com/delphi/mypng2.zip

    http://pngdelphi.sourceforge.net/
    http://www.developpez.net/forums/viewtopic.php?t=228012
    http://www.developpez.net/forums/viewtopic.php?t=250833

    à+
    De retour parmis vous après 10 ans!!

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ces propositions. Graphics32 va falloir l'étudier pour n'utiliser que ce qui m'interesse !

    Sinon, y'a pas moyen d'utiliser ce que fait sub0 avec des bmp et non des png ?

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Un BMP avec un masque alpha?
    Le format BMP possède normalement qu'une seule couleur transparente. Il n'a pas de masque.
    Par contre, il est possible de le faire, d'ajouter un masque de transparence par ses propres moyens.
    Dans ce cas, tu captures l'arrière plan, tu affiches ton masque alpha, puis l'image opaque, ou bien tu fusionnes le masque et l'image opaque en PNG et tu affiches le tout.

    Pour afficher un simple fichier BMP, c'est trop facile!
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Unit Unit1;
    Interface
    Uses Classes, Graphics, Forms, Dialogs, Controls, ExtDlgs, StdCtrls, ExtCtrls;
     
    Type
      TForm1 = Class(TForm)
        Image1: TImage;
        Button1: TButton;
        OpenPictureDialog1: TOpenPictureDialog;
        Procedure Button1Click(Sender: TObject);
      End;
     
    Var
      Form1: TForm1;
     
     
    {----------------------------------------------------------------}
    {                       }Implementation{                         }
    {----------------------------------------------------------------}
    {$R *.DFM}
     
     
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      OpenPictureDialog1.Filter := 'Fichiers images (*.bmp)|*.bmp;';
      If Not (OpenPictureDialog1.Execute) Then
        Exit;
      Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);
      Image1.Width := Image1.Picture.Bitmap.Width;
      Image1.Height := Image1.Picture.Bitmap.Height;
      Image1.Transparent := True;
    End;
     
     
    {----------------------------------------------------------------}
    End.
    à+
    De retour parmis vous après 10 ans!!

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Il semblerait que PhotoShop soit capable d'enregistrer des images BMP en 32 bits et d'intégrer un masque. Cela ressemble au format PNG sauf qu'il n'est pas compressé. Il est donc facile d'extraire le masque 8 bits des pixels RGB (24 bits). Par contre ce format ne semble pas standart, en tous les cas, il n'est pas supporté par beaucoups d'applications apparemment, mais rien ne t'empêche de l'utiliser dans tes propres réalisations.

    Pour l'affichage, tu as le choix soit d'utiliser la librairie Graphics32, soit de réaliser toi-même la fonction (extraction du masque, capture de l'arrière plan, affichage). à+
    De retour parmis vous après 10 ans!!

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Le bitmap + Alpha est juste utilisé par Windows XP pour afficher ses ressources contenues dans des DLL ! Donc faut pas dire que ce n'est pas "standard"... Sinon monsieur Bill il va devenir tout rouge

    Merci tout de même pour ces réponses !
    Vive graphics32 ! LOL

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Merci pour le rappel de mémoire, lil !

    Hum hum hum... Ce n'est pas parceque le canal Alpha des BMP n'est que rarement utilisé qu'il n'existe pas, même s'il est très peu documenté/usité.

    En fait, tout vient du fait que pour une image 24 bits (3 octets/pixel), le format BMP stocke quand même les pixels sur 32 bits pour des raisons d'alignement. Le 4ème octet est censé être toujours à zéro, mais est souvent utilisé pour stocké le canal Alpha car il ne sert réellement à rien d'autre. Ce qui est compatible avec les images 24/32 bits "normales", car si ce 4ème octet est nul, l'image est opaque. Par contre, il est effectif qu'actuellement, peu d'applications graphiques tirent parti de ce 4ème octet... :-( Paint Shop Pro ne l'utilise pas, par exemple, et à ma connaissance, seul Photoshop (et quelques éléments XP) savent le gérer.

    Par contre, les TBitmaps "standards" de Delphi sont incapables de les gérer : il faut séparer le canal Alpha "à la main".

    Le format PNG est un autre format de stockage, qui n'est absolument pas natif au système (tout comme le GIF ou le JPEG). Le format BMP n'a pas de concept de couleur transparente dans son format, c'est le GIF et le PNG qui possèdent cette caractéristique.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

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

Discussions similaires

  1. Comment afficher des JPEG dans une application Delphi ?
    Par Bouguennec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2005, 21h18
  2. Comment afficher un MessageBox depuis une fenêtre réduite ?
    Par cyberma dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/07/2005, 18h16
  3. Comment afficher le resultat d'une requete?
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 08h42
  4. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  5. Comment copier un bitmap d'une image à une autre?
    Par gord's dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2003, 13h07

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