|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// t3 t* J4 r2 o1 P# x) V
{
: J" z- `4 C, n: D# A' Xif(angle>180)angle=360-angle; ; e7 `9 }: P9 _9 I" z
if(angle<-180)angle=360+angle; ; Q* i+ Q1 l6 N2 a- L
float radians=(2*3.1416*angle)/360; / P5 Z7 T2 t! X
float cosine=(float)cos(radians); , X' j- K) \; D; [9 A& @
float sine=(float)sin(radians); $ b1 N _' p# b6 L& D5 J
float Point1x=(-Source->Height*sine); , Q2 q4 y( b7 m% R
float Point1y=(Source->Height*cosine);
5 {. }: I: x; A5 Z; [- P; \float Point2x=(Source->Width*cosine-Source->Height*sine);
; E/ {1 i' s( wfloat Point2y=(Source->Height*cosine+Source->Width*sine); : t9 F. d% k3 |; u4 [
float Point3x=(Source->Width*cosine);
5 R9 i. V. u# W, L8 X3 a5 F5 Efloat Point3y=(Source->Width*sine);
# Y1 b% V5 P0 G4 Ffloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 0 x# \5 [1 }( p' C5 z% v: J" l
float miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
" T% u' v& W A6 B% W! T, p5 ufloat maxx=max(Point1x,max(Point2x,Point3x)); 6 e" _5 L# y( W1 q" f! ~
float maxy=max(Point1y,max(Point2y,Point3y));
/ y" ?: i: A) D3 L, s5 B8 c8 b2 bint DestBitmapWidth,DestBitmapHeight;
+ G1 G% L/ Q4 [ u, q1 N: @) W6 qif(angle>90&&angle<180) ) ?: @- q2 @$ x( ?
DestBitmapWidth=(int)ceil(-minx);
2 Q" p& s+ \5 n. ~' Celse 7 \7 I$ M. _' }
DestBitmapWidth=(int)ceil(maxx-minx); # M, b2 `& ], Y
if(angle>-180&&angle<-90) $ m# N9 J( S' R
DestBitmapHeight=(int)ceil(-miny); 0 w: V: I) a! \0 s/ s. s0 k C; c
else 2 X3 k7 t# _/ T- K
DestBitmapHeight=(int)ceil(maxy-miny); $ N0 K+ _" G/ n0 s3 e. P
NewPic->Height=DestBitmapHeight; : I0 O5 T/ a. J0 H
NewPic->Width=DestBitmapWidth;
- Q( N; T$ _& F) h3 V w8 nfor(int x=0;x<DestBitmapWidth;x++)
' H) r. {) F' ~0 b) j4 o{ 1 V7 v, I1 E8 E2 R1 G
for(int y=0;y<DestBitmapHeight;y++){
6 Y$ E( m4 f+ nint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
) a+ _, I6 c) m- j% E4 E% y/ wint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); ) Q8 U# \8 W9 ]) c5 ]# Y& s
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
( C1 m6 G0 K# w2 D2 R$ F, X8 eSrcBitmapy<Source->Height) / q1 W8 _! |2 K9 [/ `
{
3 z& G- r5 D; L9 NNewPic->Canvas-> ixels[x][y]=
9 ~# Y7 q. Z! S6 Y8 c5 m2 J. bSource->Canvas-> ixels[SrcBitmapx][SrcBitmapy]; : K8 `) Q2 y$ t8 Q _
}
: W' f* X9 a; b9 I} / B7 o& q+ Z8 |) Q% Z5 k1 L; X
} # {. J2 t5 o [1 U
} |