Bonjour,
Je voudrais savoir comment faire pour gerer le transparance de deux images dans un canvas.
Si quelqu'un à une idée
Merci
Bonjour,
Je voudrais savoir comment faire pour gerer le transparance de deux images dans un canvas.
Si quelqu'un à une idée
Merci
Si tu utilise un composant TImage, il y a la propriété Transparent à mettre à true
Non en fait je me suis mal exprimer, car la propiété Transparent c'est pas pour la meme chose (je maitrise un peu quand même).
Je copie dans le canvas du TImage une image :
Sauf que là je veux que cette image soit légèrement transparante, donc en fait j'ai trouvé je pense ce que je veux mais j'arrive pas à le compiler. j'ai remplacer le bout de code plus haut par cette fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Image1->Canvas->Draw(0,0,l_origine);
Ca compile pas parce que le likeur n'arrive pas à faire la référence externe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void DrawAlphaBlend (int alpha, HDC hdcDest, TRect rectDest, HDC hdcSrc, TRect rectSrc) { BLENDFUNCTION bf; memset(&bf,0,sizeof(bf)); bf.BlendOp = AC_SRC_OVER; bf.SourceConstantAlpha = alpha; bf.SourceConstantAlpha = 128; // Test AlphaBlend(hdcDest,0,0,rectDest.Width(),rectDest.Height(), hdcSrc ,0,0,rectSrc .Width(),rectSrc .Height(),bf); }
Avez-vous une idée ?
Merci
Bonjour,
Perso, je viens d'essayer de compiler cette partie de code :
et...ben il dis rien ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void DrawAlphaBlend (int alpha, HDC hdcDest, TRect rectDest, HDC hdcSrc, TRect rectSrc) { BLENDFUNCTION bf; memset(&bf,0,sizeof(bf)); bf.BlendOp = AC_SRC_OVER; bf.SourceConstantAlpha = alpha; bf.SourceConstantAlpha = 128; // Test AlphaBlend(hdcDest,0,0,rectDest.Width(),rectDest.Height(), hdcSrc ,0,0,rectSrc .Width(),rectSrc .Height(),bf); }![]()
J'avais mis en private dans le .h:
aucun message d'erreur a la compilation...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void DrawAlphaBlend (int alpha, HDC hdcDest, TRect rectDest, HDC hdcSrc, TRect rectSrc);
Chez moi aussi ça compile sans erreur.
C'est la fonction AlphaBlend qu'il ne trouve pas ?Ca compile pas parce que le likeur n'arrive pas à faire la référence externe.
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Comprends Pas
Moi le linkeur peut pas faire le link sur la fonction AlphaBlend
Vous avez fait une appli avec une form et tout le tralàlà ???
Oui, oui...je pensais même devoir préciser qq chose comme #include <Wingdi.h>, en rapport a BLENDFUNCTION, mais même pas besoin ...![]()
Ma fonction ne fait pas partie de la class de la fiche car autrement AlphaBlend se confond avec la propriété AlphaBlend de la class TCustomForm
Pour parer à cela il faut mettre l'opérateur :: devantMa fonction ne fait pas partie de la class de la fiche car autrement AlphaBlend se confond avec la propriété AlphaBlend de la class TCustomForm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ::AlphaBlend(hdcDest,0,0,rectDest.Width(),rectDest.Height(), hdcSrc ,0,0,rectSrc .Width(),rectSrc .Height(),bf);Ta version de BCB est ancienne ?Comprends Pas
Moi le linkeur peut pas faire le link sur la fonction AlphaBlend
Moi j'ai compilé sous BCB6.
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Je suis sous BCB6
J'ai fait un nouveau projet tout nu et j'ai mis la fonction --> Ok ca compile bien !
Rajouter un bout de code pour qui fait appel à la fonction dans votre source ! --> Ben maitenant ca ne link plus !!!
Exemple :
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 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TRect rect1(0,0,0,0); TRect rect2(0,0,0,0); DrawAlphaBlend(128, 0, rect1, 0, rect2); } //--------------------------------------------------------------------------- void TForm1::DrawAlphaBlend (int alpha, HDC hdcDest, TRect rectDest, HDC hdcSrc, TRect rectSrc) { BLENDFUNCTION bf; memset(&bf,0,sizeof(bf)); bf.BlendOp = AC_SRC_OVER; bf.SourceConstantAlpha = alpha; bf.SourceConstantAlpha = 128; // Test ::AlphaBlend(hdcDest,0,0,rectDest.Width(),rectDest.Height(), hdcSrc ,0,0,rectSrc .Width(),rectSrc .Height(),bf); } //---------------------------------------------------------------------------
Affirmatif !
Rajoute la lib : msimg32.lib au projet.
Elle est dans le dossier <BCB>\Lib\Psdk
ça devrait marcher
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Merci. C'est bon maintenant ca compile bien.
Par contre ca donne pas le résultat voulu (en gros ca change rien de mon image)
Avez-vous déjà utilisé cette fonction ?
Non je n'ai jamais utilisé,
mais il y a deux champ de la structure BLENDFUNCTION que tu n'as pas initialisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3bf.BlendFlags = 0; bf.AlphaFormat = AC_SRC_ALPHA;
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Bon ca marche enfin !
Voilà un petit exemple qui marche parfaitement :
Ne pas oublier de rajouter la lib
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
37
38
39 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void TForm1::DrawAlphaBlend (int alpha, HDC hdcDest, TRect rectDest, HDC hdcSrc, TRect rectSrc) { BLENDFUNCTION bf; memset(&bf,0,sizeof(bf)); bf.BlendOp = AC_SRC_OVER; bf.SourceConstantAlpha = alpha; ::AlphaBlend(hdcDest,0,0,rectDest.Width(),rectDest.Height(), hdcSrc ,0,0,rectSrc .Width(),rectSrc .Height(),bf); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar1Change(TObject *Sender) { Image2->Picture->LoadFromFile("C:\\WINDOWS\\DELL.bmp"); Image1->Canvas->Brush->Color = clWhite ; Image1->Canvas->FillRect(Image1->ClientRect); DrawAlphaBlend(TrackBar1->Position, Image1->Canvas->Handle, Image1->ClientRect, Image2->Canvas->Handle, Image1->ClientRect); Application->ProcessMessages(); } //---------------------------------------------------------------------------
Merci pour votre aideEnvoyé par CGi
Partager