Transparence

Résolu
Messages postés
25
Date d'inscription
jeudi 9 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2012
-
Messages postés
25
Date d'inscription
jeudi 9 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2012
-
Reboujour à tous,

Je suis maintenant embeté avec la gestion des transpartents d''un composant TBitmap. Depuis que j'ai mis la possibilité de changer l'angle, une partie de mon image ne veut pas devenir transparente :

Voici le résultat :

Je ne sais pas comment mettre la partie blanche en transparent

voila une partie de mon code :

void __fastcall clMagnetron2::Paint()
{
  Graphics::TBitmap *SrcBitmap=new Graphics::TBitmap;
  Graphics::TBitmap *DestBitmap=new Graphics::TBitmap;
  SrcBitmap->LoadFromFile("C:\\Planar\\Bitmaps\\Magnetron2.bmp");


  //Convert degrees to radians
  float radians=(2*3.1416*FAngle)/360;


  float cosine=(float)cos(radians);
  float sine=(float)sin(radians);


  float Point1x=(-SrcBitmap->Height*sine);
  float Point1y=(SrcBitmap->Height*cosine);
  float Point2x=(SrcBitmap->Width*cosine-SrcBitmap->Height*sine);
  float Point2y=(SrcBitmap->Height*cosine+SrcBitmap->Width*sine);
  float Point3x=(SrcBitmap->Width*cosine);
  float Point3y=(SrcBitmap->Width*sine);


  float minx=min(0,min(Point1x,min(Point2x,Point3x)));
  float miny=min(0,min(Point1y,min(Point2y,Point3y)));
  float maxx=max(Point1x,max(Point2x,Point3x));
  float maxy=max(Point1y,max(Point2y,Point3y));


  int DestBitmapWidth=(int)ceil(fabs(maxx)-minx);
  int DestBitmapHeight=(int)ceil(fabs(maxy)-miny);


  DestBitmap->Height=DestBitmapHeight;
  DestBitmap->Width=DestBitmapWidth;


   for(int x=0;x<DestBitmapWidth;x++)
   {
        for(int y=0;y<DestBitmapHeight;y++)
        {
                int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
                int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
                if(SrcBitmapx>=0&&SrcBitmapx<SrcBitmap->Width&&SrcBitmapy>=0&&
                SrcBitmapy<SrcBitmap->Height)
                {
                        DestBitmap->Canvas->Pixels[x][y]=
                        SrcBitmap->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
                }
        }
   }


   //Show the rotated bitmap
   DestBitmap->Transparent = FTransparent;
   DestBitmap->TransparentMode = tmAuto;
   Canvas->Draw(0,0,DestBitmap);


   delete DestBitmap;
   delete SrcBitmap;
}


 


 


Je vais vraiment péter un câble ^^ merci beaucoup pour votre aide

4 réponses

Messages postés
25
Date d'inscription
jeudi 9 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2012

J'ai trouvé la soluce,, en fait tout bête

Dans la partie du code :

---------------------------------------------------------------------------------------------------------------------------

for(int x=0;x<DestBitmapWidth;x++)
   {
        for(int y=0;y<DestBitmapHeight;y++)
        {
                int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
                int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
                if(SrcBitmapx>=0&&SrcBitmapx<SrcBitmap->Width&&SrcBitmapy>=0&&
                SrcBitmapy<SrcBitmap->Height)
                {
                        DestBitmap->Canvas->Pixels[x][y]=
                        SrcBitmap->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
                }
                else
                {
                        DestBitmap->Canvas->Pixels[x][y]=clWhite;
                }
        }
   }
---------------------------------------------------------------------------------------------------------------

Sur la dernière ligne j'ai donc attribué une couleur aux pixels que je ne dessinais pas à l'origine et j'ai ajouté ceci :

----------------------------------------------------------------------------------------------------------------

DestBitmap->Transparent = FTransparent;
DestBitmap->TransparentColor = clWhite;
DisBitmap->TransparentMode = tmFixed;
Canvas->Draw(0,0,DestBitmap);

Merci encore et bonne journée
Messages postés
77
Date d'inscription
lundi 14 août 2006
Statut
Membre
Dernière intervention
27 février 2007
8
Tu devrais trouver ton bonheur ici: http://www.cppfrance.com/codes/DESSINER-BITMAP-TRANSPARENT-WIN32_22723.aspx. Avec les API win...
Voila...
Messages postés
25
Date d'inscription
jeudi 9 septembre 2004
Statut
Membre
Dernière intervention
31 octobre 2012

Merci beaucoup pour le conseil, mais je n'arrive pas a intégrer ce code au miens. Est-ce que cela pourrait être pke le blanc autours de mon image n'est pas réellement blanc ? et que dans ce cas le transarent ne la prend pas pour la couleur de la transparence ?
Messages postés
77
Date d'inscription
lundi 14 août 2006
Statut
Membre
Dernière intervention
27 février 2007
8
Tu est sur d'avoir créé le masque avec la couleur du fond et d'avoir mis cette couleur sur ce dernier?
________________________________________

debut:
mov ah, 09h
mov dx, offset message
int 21h
ret
message db ?@+?, ?$?
end debut
________________________________________