|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
3 B( A' }) H/ ?2 Y{
5 b9 e; P/ e! Y1 R0 Oif(angle>180)angle=360-angle; ' u3 m5 z \; p. ]+ z( `; T
if(angle<-180)angle=360+angle; ' Y8 a0 c4 n# Z6 U- Q6 j+ J s
float radians=(2*3.1416*angle)/360; 4 Y- I! H# w- Z/ ?
float cosine=(float)cos(radians); # b, T( {) E& Q7 m
float sine=(float)sin(radians); 7 X/ W6 [+ ~4 h3 d
float Point1x=(-Source->Height*sine); ( ~0 v1 v7 E2 g; @; P+ q8 t) |
float Point1y=(Source->Height*cosine); 4 p* d z, N! u7 U
float Point2x=(Source->Width*cosine-Source->Height*sine);
) w8 ]$ _: p' d. c U8 yfloat Point2y=(Source->Height*cosine+Source->Width*sine);
' c5 r; d7 k' O P1 [- |; ^! ^0 _float Point3x=(Source->Width*cosine); 0 k/ J4 B5 U. K K. K
float Point3y=(Source->Width*sine);
4 l! l' x' v& t1 J& Nfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
0 o; L, t, C4 r& J4 `float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 7 w# U5 r; T( L7 A$ g: ~# T; R
float maxx=max(Point1x,max(Point2x,Point3x)); # [, s, x) N' Y4 d* x+ z* `
float maxy=max(Point1y,max(Point2y,Point3y));
( r U$ }# @( N4 Z5 oint DestBitmapWidth,DestBitmapHeight;
( j7 [; o* f+ p, Pif(angle>90&&angle<180)
0 M I0 @( }3 c% o0 u9 {DestBitmapWidth=(int)ceil(-minx);
& F* i9 e I4 g% m! Melse
& M3 y. [! P" I/ dDestBitmapWidth=(int)ceil(maxx-minx);
" K" ]; \" S0 }+ B- mif(angle>-180&&angle<-90) 4 D: @+ N- Q' b1 J9 T+ o4 J J
DestBitmapHeight=(int)ceil(-miny);
" e( p4 @0 E0 { R/ Delse 0 }7 i6 }1 H8 h: J& t0 T
DestBitmapHeight=(int)ceil(maxy-miny); , e" y/ a- T6 P# a! ^% A* Y
NewPic->Height=DestBitmapHeight;
" ^& |" D& k" O7 YNewPic->Width=DestBitmapWidth; - D' E* B/ _' y+ ]8 f
for(int x=0;x<DestBitmapWidth;x++) * W! ]9 u( H# p- w4 q
{ 7 h7 w* P; O0 Q# k
for(int y=0;y<DestBitmapHeight;y++){ 3 C6 F }& Z' i; i+ i, {, u+ n
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
/ g6 ?- p+ B" u6 X! u5 e# ]8 Kint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
0 V5 M( F4 b1 Z! ^if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& / F" \& f% {$ P7 N6 g
SrcBitmapy<Source->Height) ; Q' O/ w4 r- g& A2 o8 b* Q' c$ u( r
{ 3 E( R/ |- R9 z2 H, I, s
NewPic->Canvas-> ixels[x][y]=
( u9 e& F: w& ^7 e/ B6 W' kSource->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
6 Z& K7 O# K9 h}
0 q8 k& x7 @. U' S. ^} # i% r& ]; Q1 Z- R- n
} 6 W2 [% h8 \% Z G
} |