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.