|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// u9 K! ~3 p% v4 k5 ~+ P. s5 u
{
' _/ w- i- u; Wif(angle>180)angle=360-angle; / h5 C& A z. Q" _+ t1 P
if(angle<-180)angle=360+angle; / K. t% V. e1 L+ I& @
float radians=(2*3.1416*angle)/360; ' w- y: z8 }$ s! f) H; h1 ^7 ?
float cosine=(float)cos(radians);
5 b! U9 d. O& }) ~( `3 l9 @. yfloat sine=(float)sin(radians);
: }! S8 b, y+ ], g& qfloat Point1x=(-Source->Height*sine); , C( D! y$ t" F, t9 Y& B
float Point1y=(Source->Height*cosine);
( O* u3 ~# _! Q5 c" s Afloat Point2x=(Source->Width*cosine-Source->Height*sine); ! |: ]& ^- y; U+ z% R3 }. R$ T
float Point2y=(Source->Height*cosine+Source->Width*sine);
( t. ^3 j; p5 L7 z+ \% ~: y, mfloat Point3x=(Source->Width*cosine);
! M+ O/ Q3 a$ x6 d* Q, S- W8 lfloat Point3y=(Source->Width*sine); : O: r( y! `3 {; q7 l/ T
float minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
2 L% v( j& D& N" xfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
! H8 }* Y8 y/ o4 H/ ~8 u7 x$ qfloat maxx=max(Point1x,max(Point2x,Point3x)); ) ~8 U5 H% V7 R5 [
float maxy=max(Point1y,max(Point2y,Point3y)); * v* s" [" g/ f3 @' X
int DestBitmapWidth,DestBitmapHeight; ' k( o" i( a, { d* J1 U
if(angle>90&&angle<180) ! T# h, V2 p/ M5 E" q# J6 c% u
DestBitmapWidth=(int)ceil(-minx);
- C% j9 q- S( B1 l5 Ielse
& r9 q- a- t" \DestBitmapWidth=(int)ceil(maxx-minx);
/ Z C% h8 c# t7 G% |* ^9 h+ h% iif(angle>-180&&angle<-90) # s& _+ K1 j: i
DestBitmapHeight=(int)ceil(-miny); 4 q. |2 Z3 m8 v7 R* x2 ~
else $ L# t0 k7 h& _/ S; h) j
DestBitmapHeight=(int)ceil(maxy-miny); 5 E" |# M; R3 x( m+ N3 o
NewPic->Height=DestBitmapHeight;
7 w8 j8 s; s% y/ Y% QNewPic->Width=DestBitmapWidth; # M! n6 d8 w" P' a9 R- j* K
for(int x=0;x<DestBitmapWidth;x++)
3 [) ]1 ^; n6 @+ I, _3 g{ 7 K* d/ L; X3 Y: t$ l; @- O `
for(int y=0;y<DestBitmapHeight;y++){
6 { ] e: C2 Iint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); 3 R4 E1 v; @7 E% c# Y, h0 t' @
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
) W: z& i% k, a% Y5 z# }$ c& Gif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 9 u' U6 I. l, _6 H7 N
SrcBitmapy<Source->Height)
1 A3 C5 e3 V/ ^+ @' a/ g$ K2 ]{ ) Y2 a8 Z0 T+ G% {/ ^: Q4 c' m
NewPic->Canvas-> ixels[x][y]= ) G7 {8 k0 _3 [0 Y
Source->Canvas-> ixels[SrcBitmapx][SrcBitmapy]; ! i5 `- V: g# y* A
}
& l2 N2 I- Z2 _1 q! V1 p}
; l! J. |$ ^* m: V! V* E}
0 ^* G( q+ `3 z4 r5 I. O! d} |