Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre régulier
    Inscrit en
    juin 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 88
    Points : 85
    Points
    85

    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 :
    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 émérite
    Inscrit en
    septembre 2007
    Messages
    581
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 581
    Points : 935
    Points
    935

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •