begin process at 2012 05 28 08:55:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Multimédia

 > 

Clignotement de TBITMAP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Clignotement de TBITMAP

lundi 4 septembre 2006 à 09:57:02 | Clignotement de TBITMAP

websinh

Bonjour à tous,

Je suis un peu embêter avec une animation. En fait j'essaie de faire tourner un composants sur lui même en lui changeant son angle. Malheureusement, étant donné que j'utilise du TBitmap et que l'image est assez grande, il y a un clignotement qui est généré au ritme du timer.

Voici comment il fonctionne en gros :

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void __fastcall clRoll::Paint()
{
  Graphics::TBitmap *SrcBitmap=new Graphics::TBitmap;
  Graphics::TBitmap *DestBitmap=new Graphics::TBitmap;
  AnsiString BmpPath;

  if(FAlarm)
        BmpPath = "C:\\Planar\\Bitmaps\\RollAlarm.bmp";
  else if (FTurn)
  {
        if (FSens==sensLeft)
                BmpPath = "C:\\Planar\\Bitmaps\\RollLeft.bmp";
        else
                BmpPath = "C:\\Planar\\Bitmaps\\RollRight.bmp";
  }
  else
        BmpPath = "C:\\Planar\\Bitmaps\\Roll.bmp";

  SrcBitmap->LoadFromFile(BmpPath);

  //To adapt the center of the rotating animation
  float centreX = 0;
  float centreY = 0;

  //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];
                }
                else
                        DestBitmap->Canvas->Pixels[x][y]=clWhite;
        }
  }

  centreX = abs(DestBitmap->Width)/2-abs(SrcBitmap->Width)/2;
  centreX = 21-abs(centreX);
  centreY = abs(DestBitmap->Height)/2-abs(SrcBitmap->Height)/2;
  centreY = 21-abs(centreY);

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

  Width = DestBitmap->Width+centreX;
  Height = DestBitmap->Height+centreY;

  delete SrcBitmap;
  delete DestBitmap;
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Quu'est ce que vous me conseillez ? Est-ce que je devrais passer par une autre méthode graphique ?

Merci à vous tous

PS. J'utilise Borland C++Builder 6

lundi 4 septembre 2006 à 23:09:46 | Re : Clignotement de TBITMAP

Ombitious_Developper

Salut :

Je pense que l'API FreeImage propose des fonctions pour faire la rotation d'une image.
FreeImage : bibliothèque de traitement des images.



Cette discussion est classée dans : int, height, float, srcbitmap, destbitmap


Répondre à ce message

Sujets en rapport avec ce message

Transparence [ par websinh ] 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' Afficher un float a l'ecran, %f de printf [ par kaervas ] Bonjour, je suis en train de coder la fonction %f de printf, je galere un peu en fait! Pour le %d on utilise des modulos et des puissances decroissant langage C : probleme syntax [ par Keymi ] Bonjour , tous d'abord le but de l'exercice est de faire une fonction permettant de determiner la valeur maximale et minimale d'un tableau de flottant Besoin d'aide [ par fred100582 ] Salut, je suis en train de me faire un petit programme pour automatiser le traitement de fichiers excel mais çà ne marche pas et je ne vois pas d'ou ç Tester le type d'une valeur??? [ par freepouy18 ] Salut a tous,Voila mon probleme : Je travail sur une feuille excel dont je récupère certaines valeur que je stock une à une dans un COleVariant. Le pr Errreur [ par RM50Man ] Mon code ne marche pas: Le compilateur devcpp me met build error 1 #include /* contient déjà et */ #include #include #include void reset Pavé tournant [ par nisaloncaje ] Bonjour, je désirais pour commencer en OpenGL sous devc++ faire un programme simulant un pavé tournant autour de l'axe y : voici mon code source :#inc Surcharge des opérateurs [ par karamellatti ] salut tout le monde,je sollicite votre aide pour la résolution d'un ptit problem concernant un mini-programme de calcul matriciel..voici  le programme Surdefinition de fonction [ par samaie ] float test(int i, int j) { return (float) i+j; } float test(float i, float j) <p align="le Warning de conversion [ par Nadaman ] Salut, Dans mon programme j'ai des conversion de float en int. Est-ce qu'il y a une manière pour éviter les warning. Si j'ai ces avertissement je doi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales