|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// . C' \" M9 R* _- d8 S
{ }7 L4 T, Q( {' S9 c' K& ~
if(angle>180)angle=360-angle;
' N3 j) [: T! s5 X: P! P+ Qif(angle<-180)angle=360+angle;
1 j$ N# X( s! kfloat radians=(2*3.1416*angle)/360; 0 F/ ]+ M, ?+ L2 \5 m% I! K# ]3 n. G
float cosine=(float)cos(radians);
- ?, Q( F1 Q5 k; C- {, s0 _float sine=(float)sin(radians);
; ~& e4 z" y& M, Y, c$ lfloat Point1x=(-Source->Height*sine); 6 R0 B- S" u: O; }9 `
float Point1y=(Source->Height*cosine);
. Z% l. o0 b5 N* S q, C$ pfloat Point2x=(Source->Width*cosine-Source->Height*sine); 1 M J$ o, Y/ _ a6 N* _3 \
float Point2y=(Source->Height*cosine+Source->Width*sine); - U8 X' r0 n, o6 v6 L) l3 o1 K
float Point3x=(Source->Width*cosine); , S5 N3 P F) d% z' I
float Point3y=(Source->Width*sine); 7 j+ S( A( }- w2 c
float minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
. ]; {! Q7 ]* E. Y: U: i- rfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
" u H/ a9 g3 m: _7 |3 dfloat maxx=max(Point1x,max(Point2x,Point3x));
* F% K- w% Q+ X4 U( Wfloat maxy=max(Point1y,max(Point2y,Point3y));
+ M, N X% P* [& Lint DestBitmapWidth,DestBitmapHeight;
- V; I, T/ p+ V/ [3 `if(angle>90&&angle<180)
* n& S) {0 f8 S/ k* J- _8 GDestBitmapWidth=(int)ceil(-minx); , c$ ~9 `7 y H& O& \0 @3 [' v
else # z1 F3 P/ o0 u" B
DestBitmapWidth=(int)ceil(maxx-minx); - S( S4 J# ?8 c) B
if(angle>-180&&angle<-90)
' @1 r& n- s# a5 p3 P4 i; QDestBitmapHeight=(int)ceil(-miny); , O7 T6 Y/ a d6 ~8 E- Q/ ]
else $ {) E" ~, r" c# n) u, c s# O
DestBitmapHeight=(int)ceil(maxy-miny); . ^- k" D0 v/ y% Q8 Q& i) b
NewPic->Height=DestBitmapHeight;
: N1 U' H( `1 L! A) O$ kNewPic->Width=DestBitmapWidth; $ e, d/ K! K% ^. U. J' x
for(int x=0;x<DestBitmapWidth;x++)
& }: |% F" K& a% }* g2 D{ & |2 F* o3 i0 w* a
for(int y=0;y<DestBitmapHeight;y++){ * J/ Z- c& @8 P. ]' z! [
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); % Y% O: J7 U |" b! P
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); " A( j/ J* h0 z) V3 S: x7 O
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 6 i+ l1 n" b9 n5 |5 s8 p3 s# j
SrcBitmapy<Source->Height) 4 G4 z- E" d" Y. ?2 h2 M
{
$ @ @! l+ H3 h7 M1 Z2 |: UNewPic->Canvas-> ixels[x][y]=
8 z/ g, g4 Z2 k: w8 a. ESource->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
' `5 s; b/ j7 _7 _9 c( S} 1 B Q# K/ F4 [- R6 r& X/ {
}
' Q2 U/ G* O* C4 q} / ?' v; ?( b1 @/ E5 s; y
} |