Bonjour
je cherche avec Bcpp4 (vieux ...) à faire des calques avec des TImage superposés.
J'ai donc recherché à travailler Transparent de TImage. Et les ennuis ont commencés.
Le code est inspiré de l'aide de Bcpp.
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 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Image1->Transparent=false; Image1->Picture->Bitmap->LoadFromFile("Original1.bmp"); Image2->Transparent=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap* bmp = new Graphics::TBitmap(); if (bmp) { bmp->Transparent=true; bmp->TransparentMode=tmFixed; bmp->TransparentColor=clWhite; bmp->LoadFromFile("calque02.bmp"); //Image2->Canvas->StretchDraw(Rect(0,0,Image2->Width, Image2->Height), bmp); Form1->Canvas->Draw(0,0,bmp); delete bmp; bmp=NULL; } }
Dans une Form1, j'ai placé un bouton et deux TImage l'un sur l'autre. Image1 contient une image bmp "de base" et Image2 devrait recevoir une image d'un calque dont la couleur de fond est "transparente" à Image2 ... Image2 a sa propriété Transparent=true;
Bien entendu ... çà ne marche pas !
Pour tester j'ai placé deux lignes que je place alternativement en commentaire. Quand la ligne Form1->Canvas->Draw(0,0,bmp); est active, la transparence du bmp marche seulement sur le bouton Button1 qui se trouve sous le bmp tracé, mais pas Image1 qui est masquée. Quand la ligne Image2->Canvas->StretchDraw(Rect(0,0,Image2->Width, Image2->Height), bmp); est activée : bien entendu, on ne voit pas plus Image1.
Quelqu'un saurait il afficher proprement une image transparente en bitmap au-dessus d'une autre image sans passer par le "truc" du canal alpha par exemple des png ?
Je remarque que la propriété Transparent est documentée sur TImage et jamais sur TGraphics ou TBitmap. Pourtant, l'aide indique bien que Transparent est aussi un membre de TBitmap .... et le compilateur l'accepte. serait-ce l'indice d'un défaut ?
Il y a plusieurs discussions sur ce thème. Sur Delphi, les gens prétendent que la transparence entre deux TImage çà passe sans problème. Quelqu'un a t'il une idée sur Bcpp ?
Partager