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
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
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.
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 Tu parles surement de la librairie Graphics32 qui permet de gérer les Bitmap 32 bits.
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
à+
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 ?
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.
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). à+
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager