|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// - W+ w9 l) n, P0 z
{
/ w/ Y& E& n) V8 J/ [# Hif(angle>180)angle=360-angle;
4 a9 y4 Y0 P+ D; X% s1 uif(angle<-180)angle=360+angle;
' J' E* V# E" x( ` W+ Z0 Mfloat radians=(2*3.1416*angle)/360;
2 M- d i9 n3 M: qfloat cosine=(float)cos(radians); , O1 ]0 k( G9 a; Z O. u1 c+ S
float sine=(float)sin(radians);
& G# O8 _7 l( n0 J# r$ g/ efloat Point1x=(-Source->Height*sine);
! ^4 l/ M+ T. K0 Kfloat Point1y=(Source->Height*cosine);
, q, ~9 C/ I6 i' C7 Q# ^/ f* H, D# R3 \float Point2x=(Source->Width*cosine-Source->Height*sine);
& ?2 X4 G6 F9 |& }0 z7 |* P0 L9 Pfloat Point2y=(Source->Height*cosine+Source->Width*sine); , V/ m/ w a3 c3 C4 @% P
float Point3x=(Source->Width*cosine);
7 ^% D) s6 O3 x; r# L. q7 ]float Point3y=(Source->Width*sine);
/ i, c! E$ _8 O) c3 kfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 4 s- o" T$ Q5 D- K( b! s
float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 2 I* y9 Z6 u! _$ i" s/ V$ _# B
float maxx=max(Point1x,max(Point2x,Point3x));
" a1 S Y! O1 O# T8 kfloat maxy=max(Point1y,max(Point2y,Point3y)); & W; ~: y( Y4 G( o& J1 x! ]
int DestBitmapWidth,DestBitmapHeight;
_0 n+ K, o2 fif(angle>90&&angle<180)
/ u/ b. I `' `, eDestBitmapWidth=(int)ceil(-minx); : E2 V6 J* p x' t$ Q6 o2 l
else : E6 e: b; R5 R. h9 I0 W
DestBitmapWidth=(int)ceil(maxx-minx);
& R3 [% _8 c5 m+ M4 e, K( qif(angle>-180&&angle<-90) ! C6 G2 Y% `) p% C {. q" I/ l
DestBitmapHeight=(int)ceil(-miny);
8 B5 f$ ~% u( D+ o' n% pelse
) N- [# Z) F2 g: T4 N, X2 r4 l$ JDestBitmapHeight=(int)ceil(maxy-miny);
! d; i7 U* C% ~$ W' h R3 e8 yNewPic->Height=DestBitmapHeight; ) e9 `: K3 F% C3 p$ m! F
NewPic->Width=DestBitmapWidth;
$ y: J7 Y* N1 l& L! ~ b* xfor(int x=0;x<DestBitmapWidth;x++) / T, e2 ^+ @$ P& \7 |
{
* h }4 g u$ g# d: L. j" [for(int y=0;y<DestBitmapHeight;y++){ 3 Q+ N0 i# W0 v( b& K
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
4 m6 b5 Q+ E/ E2 B: t d6 Gint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
8 Z8 `$ s2 Z" l6 m3 i( m3 [+ dif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
9 c; i/ J* f, M8 tSrcBitmapy<Source->Height)
! v- d! j( z2 j; i% W& o# L4 H{
" g- Q/ w h) _- ^8 u+ t1 I9 iNewPic->Canvas-> ixels[x][y]=
{3 n" A& y/ R5 A5 c4 L* m: l, @Source->Canvas-> ixels[SrcBitmapx][SrcBitmapy]; ( X% v W l4 _/ y* q
} j$ _5 V4 H6 O
}
+ o: o7 o% T0 @0 B} 9 B- x4 X4 k5 P; R7 \
} |