TImageList, TImage et Transparence [Résolu]

Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
- - Dernière réponse : Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 16 sept. 2007 à 22:12
Bonsoir,

J'ai un soucis de transparence, voila le bazar :

Je pose une TImage, je vais peindre dessus grace au .Canvas
Je pose un TImageList. Elle contient une image 25x25, représentant un lapin ( super hein !) et il est entouré de clFushia. Cette couleur est donc une couleur de transparence.
Si je l'ouvre dans un TImage avec Transparent := True; nous n'auront que le lapin et pas de clFushia.
Mais avec Image1.Canvas.Draw(0,0,fBmp); mon lapin apparait entouré de blanc.
Pourquoi ? Et comment y remédier ? Merc

voila un bout de code rapide :

Procedure TForm1.MyRabbit;
var
fBmp: TBitmap;
begin
fBmp := TBitmap.Create;
ImageList1.GetBitmap(0,fBmp);
Image1.Canvas.Draw(0,0,fBmp);
fBmp.Free;
end;
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
3
Merci
moi je me prend plus la tete avec les bitmaps transparent qui, ne sont carrement pas prevus pour cela, et même si il en sont pourvus, ça marche tellement mal et le rendus est tellement pourris digne des 70's que c'est même pas la peine de l'utiliser.

vas voir ma source MasterMind, j'y utilise massivement les PNG, c'est beau, rapide, pas prise de tete et surtout, Draw prend bien la transparence du PNG (directement sur le canvas sans passer par un buffer bitmap intermediaire).

voila, quand on veut enfoncer un clou, même si un manche de tournevis ou un manche de clef plate peut faire l'affaire, un marteau c'est quand même 100 fois mieux.

Merci f0xi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
Procedure TForm1.MyRabbit;
var
  fBmp: TBitmap;
begin
  fBmp := TBitmap.Create;
  try
    ImageList1.GetBitmap(0,fBmp);
    fBmp.Transparent := Image1.Transparent;
    fBmp.TransparentColor := Image1.TransparentColor;
    Image1.Canvas.Draw(0,0,fBmp);
  finally
    fBmp.Free;
  end;
end;
Commenter la réponse de f0xi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
tu voulais dire :
...
fBmp.Transparent := Image1.Picture.Bitmap.TransparentColor;
...
?

ça marche pas de toute façon :/ là, j'ai plus rien qui s'affiche dans mon TImgage, qu'il soit en Transparent := true ou false;

En meme temps, si je fais "fBmp.Transparent := Image1.Picture.Bitmap.TransparentColor;" euh ... image1 étant vide puisque il est juste posé sur la fiche, le fBmp.transparentcolor n'obtiendra rien, non ?
Commenter la réponse de JulioDelphi
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
ça, ça marche :

procedure TForm1.Button1Click(Sender: TObject);
var
fBmp: TBitmap;
begin
fBmp := TBitmap.Create;
try
fBmp.TransparentMode := tmFixed;
fBmp.TransparentColor := clFuchsia;
ImageList1.GetBitmap(0,fBmp);
Image1.Canvas.Draw(0,0,fBmp);
finally
fBmp.Free;
end

MAIS (car ya un mais) avant de mettre ce lapin dans mon TImage, mon timage contient un fond (une autre bitmap), je voulais donc mettre mon lapin sur ce fond (de l'herbe evidemment :p) mais en transparent. La ce quiarrive si je mets un fond d'un bitmap d'herbe c'est qu'il remplace mon herbe par un lapin au fond transparent :''( sniff, je suis proche !
Commenter la réponse de JulioDelphi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
j'irais même plus loin, la difference entre bitmap transparent et png c'est le même gouffre entre le GIF et Flash.
Commenter la réponse de f0xi
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Sinon il y avait tout simplement l'API :
TransparentBLT

et la marche à suivre est très simple :

créer un BMP y mettre l'image de fond (l'herbe)
utiliser TransparentBlt pour y ajouter le lapin (en transparence)
puis faire un BitBlt sur le TImage

et voilà

 
@+
Cirec

Commenter la réponse de Cirec
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
ça fonctionne avec PNGlib de ton mastermind foxy :]
je file le bout de code ici :

fPng := TPngObject.Create;
fPng.LoadFromFile('herbe.png');
paintbox1.Canvas.Draw(0,0,fPng);
fPng.Assign(nil);
fPng.LoadFromFile('lapin.png');
Png.TransparentColor := clFuchsia;
Png.Transparent := true;
paintbox1.Canvas.Draw(0,0,fPng);
fPng.free;

merci a vous 2 !
Commenter la réponse de JulioDelphi
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
@cirec
Pourrais-tu donner un exemple simple de l'utilisation de TransparentBLT.
Merci par avance

cantador
Commenter la réponse de cs_cantador
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
Pose 2 TImage, dans la premiere, rempli la propriété PICTURE avec une bitmap contenant du jaune pur (255-255-0) soit clYellow (ou change mon exemple toi meme)
puis voila le bout de code:
TransparentBlt(image2.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, clYellow);

infos : http://msdn2.microsoft.com/en-us/library/ms532303.aspx
images avec du jaune : http://images.google.fr/images'hl=fr&q=jaune&btnG=Recherche+d%27images
Commenter la réponse de JulioDelphi
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Merci JulioDelphi pour l'exemple

@Cantador
si tu as des soucis avec tu me fais signe

 
@+
Cirec

Commenter la réponse de Cirec
Messages postés
329
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
10 mars 2012
0
Merci
Salut,

Sinon il existe aussi la fonction BrushCopy du canvas qui permet ainsi de dessiné avec la transparence
 
usage:
  Canvas.BrushCopy(DestRect , Bmp , SrcRect , Bmp.Canvas.Pixels[0,0]);

@+
Commenter la réponse de cs_shining
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
@cirec
merci, mais je te répondrai plus tard, car j'ai un gros souci d'installation de compos sur D7 en ce moment..
@+

cantador
Commenter la réponse de cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
@cirec
Ouf je m'en suis sorti (Install de TeeChartPro.. avec ReportBuilder..)
Pour revenir à TramsparentBlt, je ne vois pas de transparence.
Il y a un truc qui m'échappe..

cantador
Commenter la réponse de cs_cantador
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
@Cantador :
Télécharge cette mini-source

c'est un exemple des plus simples
si tu as besoin de précisions ... n'hésites pas

 
@+
Cirec

Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.