|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
% f, u- a# \! P1 E{ ) Y) ~$ }4 k- T' O3 @' M8 j
if(angle>180)angle=360-angle; # w; g6 e0 K: H/ {. W5 F3 g% z
if(angle<-180)angle=360+angle;
1 ^3 z; E) ^7 q F3 [6 Y! Efloat radians=(2*3.1416*angle)/360;
4 ?! U+ f* g, `3 N" Xfloat cosine=(float)cos(radians);
: H; | k. F- x& O( [, x5 |7 c5 M8 Mfloat sine=(float)sin(radians);
* }8 i% M9 @5 F, b. Jfloat Point1x=(-Source->Height*sine);
; n2 e# L" l" e' s% xfloat Point1y=(Source->Height*cosine);
9 u8 t2 k4 X: _) ?) p# }. N/ Ofloat Point2x=(Source->Width*cosine-Source->Height*sine); 0 a, [/ A+ a' O% s" m( Y* X
float Point2y=(Source->Height*cosine+Source->Width*sine);
7 X/ S" Y% P7 ?( s* l7 m8 z% Y8 @float Point3x=(Source->Width*cosine);
. k- n$ {6 i [3 e, O6 e( V! vfloat Point3y=(Source->Width*sine); ) H; K) Q* N0 X% c* n1 j
float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); / R# ~& S2 {' t0 z; o% E2 I6 u D
float miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
+ Z9 T( q- L2 d/ a2 o) P0 v- jfloat maxx=max(Point1x,max(Point2x,Point3x));
$ N2 |5 A. t! ], \& I- U; R' Z8 ffloat maxy=max(Point1y,max(Point2y,Point3y));
5 [" T9 n) W) K+ U5 |/ W& ]int DestBitmapWidth,DestBitmapHeight; 8 u1 _: l- }- c
if(angle>90&&angle<180) : T2 S! W3 t8 k1 E# e; S3 f# ^ m
DestBitmapWidth=(int)ceil(-minx);
, m( I# f* \& G5 T0 a9 oelse
E! m5 U3 W, dDestBitmapWidth=(int)ceil(maxx-minx);
7 T) p6 S* d3 [1 {: V. R/ {1 Tif(angle>-180&&angle<-90) * \3 S! o8 ^: N* x( R
DestBitmapHeight=(int)ceil(-miny); x9 e1 i& W1 p/ y% `
else 7 z4 t3 V6 r! O% }3 f7 Z
DestBitmapHeight=(int)ceil(maxy-miny);
0 T6 b3 D4 v. \: `; E- u9 N+ C2 FNewPic->Height=DestBitmapHeight; 9 E6 I6 K4 w4 L1 R1 T: z
NewPic->Width=DestBitmapWidth; 1 w; q" B P: b! [; e
for(int x=0;x<DestBitmapWidth;x++) - t# m2 h+ B* i" [4 A# u
{
6 _" b; ?; v- e/ Lfor(int y=0;y<DestBitmapHeight;y++){
$ g9 L( h5 \6 \7 T- r7 [ z# mint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); : W. V5 c+ V [1 X
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
/ c9 _9 c$ [) Iif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& ; h% l/ U; J7 q& [9 |" g
SrcBitmapy<Source->Height) 6 m% v6 }9 _& x0 H2 O
{ H# _ i) g; |, j0 _, [- q
NewPic->Canvas-> ixels[x][y]= $ A7 F' [( ~& @6 u/ H: x6 Q
Source->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
. ?4 d" `: b0 l* K$ p} 0 J# {3 Y% f: }( @1 |
}
N9 b( R8 x* V& J} % F+ g3 O& [4 u& r( e3 b D
} |