TImageList, TImage et Transparence [Résolu]

JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 13 sept. 2007 à 19:00 - Dernière réponse : Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention
- 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 

14 réponses

Répondre au sujet
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 14 sept. 2007 à 00:37
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 13 sept. 2007 à 21:09
0
Utile
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 13 sept. 2007 à 21:51
0
Utile
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 13 sept. 2007 à 22:06
0
Utile
ç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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 14 sept. 2007 à 00:39
0
Utile
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
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 14 sept. 2007 à 15:29
0
Utile
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 14 sept. 2007 à 19:39
0
Utile
ç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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 14 sept. 2007 à 20:44
0
Utile
@cirec
Pourrais-tu donner un exemple simple de l'utilisation de TransparentBLT.
Merci par avance

cantador
Commenter la réponse de cs_cantador
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 14 sept. 2007 à 21:14
0
Utile
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
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 14 sept. 2007 à 21:40
0
Utile
Merci JulioDelphi pour l'exemple

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

 
@+
Cirec

Commenter la réponse de Cirec
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 15 sept. 2007 à 14:06
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 15 sept. 2007 à 16:03
0
Utile
@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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 15 sept. 2007 à 23:57
0
Utile
@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
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 16 sept. 2007 à 22:12
0
Utile
@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.