Bonjour,
Je voudrais savoir comment faire pour gerer le transparance de deux images dans un canvas.
Si quelqu'un à une idée
Merci
Version imprimable
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 8-)).
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:Image1->Canvas->Draw(0,0,l_origine);
Ca compile pas parce que le likeur n'arrive pas à faire la référence externe.Code:
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 ...:koi:Code:
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:
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 ?Citation:
Ca compile pas parce que le likeur n'arrive pas à faire la référence externe.
Comprends Pas :koi:
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 ...:roll:
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 :: devantCitation:
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
Code:
1
2 ::AlphaBlend(hdcDest,0,0,rectDest.Width(),rectDest.Height(), hdcSrc ,0,0,rectSrc .Width(),rectSrc .Height(),bf);
Ta version de BCB est ancienne ?Citation:
Comprends Pas :koi:
Moi le linkeur peut pas faire le link sur la fonction AlphaBlend
Moi j'ai compilé sous BCB6.
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:
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
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:
1
2
3bf.BlendFlags = 0; bf.AlphaFormat = AC_SRC_ALPHA;
Bon ca marche enfin !
Voilà un petit exemple qui marche parfaitement :
Ne pas oublier de rajouter la libCode:
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 aideCitation:
Envoyé par CGi