IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Rotation d'image avec bitblt/xform


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Points : 115
    Points
    115
    Par défaut Rotation d'image avec bitblt/xform
    Bonjour à tous,

    J'essaie de faire pivoter une image, seulement le problème est que je n'arrive pas à spécifier un autre centre pour la rotation.

    Mon image est rectangulaire mais contient un cercle centré, le code que j'utilise effectue bien une rotation mais sur le point haut gauche de mon image, ce qui bien entendu ne correspond pas à ce que je voudrais, et c'est pourquoi je viens vers vous; voici mon code actuel :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #ifndef M_PI
    	#define M_PI 3.14
    #endif
     
    #define min(a, b)  (((a) < (b)) ? (a) : (b)) 
    #define max(a, b)  (((a) > (b)) ? (a) : (b))
     
    void  TProjector::rotatePicture(TImage * source, int angle)
    {
    	Graphics::TBitmap *SrcBitmap = source->Picture->Bitmap;
    	Graphics::TBitmap *DestBitmap= new Graphics::TBitmap;
     
    	float radians=(-2*3.1416*angle)/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;
     
    	SetGraphicsMode(DestBitmap->Canvas->Handle,GM_ADVANCED);
    	XFORM xform;
    	xform.eM11=cosine;
    	xform.eM12=-sine;
    	xform.eM21=sine;
    	xform.eM22=cosine;
    	xform.eDx = (float)-minx;
    	xform.eDy = (float)-miny;
     
    	SetWorldTransform(DestBitmap->Canvas->Handle,&xform);
     
    	BitBlt(DestBitmap->Canvas->Handle,
    			0,
    			0,
    			DestBitmap->Width,
    			DestBitmap->Height,
    			SrcBitmap->Canvas->Handle,
    			0,
    			0,
    			SRCCOPY);
     
    	Image15->Picture->Bitmap = DestBitmap;
     
     
    	delete DestBitmap;
    }
    Je développe sous Borland (BCB) sous windows. Si vous avez une astuce afin que je puisse faire tourner mon image sur son centre merci bien de m'en faire part.

    Cordialement.

  2. #2
    Membre chevronné Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 903
    Points : 2 116
    Points
    2 116

Discussions similaires

  1. Problème pour faire la rotation d'une image(Avec ImageJ)
    Par tadjara dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 12/04/2010, 12h48
  2. Problème pour faire la rotation d'une image(Avec ImageJ)
    Par tadjara dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 10/04/2010, 12h33
  3. [GD] rotation d'une image avec GD
    Par DiverSIG dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/09/2009, 10h23
  4. Rotation d'image avec Wiaaut.dll
    Par exclusif dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/02/2007, 01h17
  5. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo