|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
# v( @& H# S. u{ 8 ]8 W& a2 K" g0 O4 V1 V
if(angle>180)angle=360-angle;
6 f3 D Z' D8 d) ?/ ?: mif(angle<-180)angle=360+angle;
, c2 @- _9 F5 {6 Y0 a# Lfloat radians=(2*3.1416*angle)/360; 4 K+ r* t- S$ `0 W
float cosine=(float)cos(radians);
: f# b2 n0 e, j$ x! X8 Bfloat sine=(float)sin(radians); * o# l, W0 ^" x$ z/ h# N4 K
float Point1x=(-Source->Height*sine);
& j" p. ~8 o! Hfloat Point1y=(Source->Height*cosine); {% k2 j+ H( B4 _, b
float Point2x=(Source->Width*cosine-Source->Height*sine); l7 j& t3 }5 k* f. o
float Point2y=(Source->Height*cosine+Source->Width*sine);
- t6 o: l) S& U( S7 {- s* ufloat Point3x=(Source->Width*cosine);
( s$ G* J5 O# S% ^) |float Point3y=(Source->Width*sine);
" N: d- b6 V0 [; ]6 H" F1 Ofloat minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
4 S* _) {# y; a( R! Efloat miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
& h: T5 Y6 | s4 }$ M Q; Cfloat maxx=max(Point1x,max(Point2x,Point3x)); / j3 ^8 Z) ^) Q$ [8 \2 ]
float maxy=max(Point1y,max(Point2y,Point3y));
/ x9 X" \% d5 f; R2 D( qint DestBitmapWidth,DestBitmapHeight; 2 e2 f H" g( A% o
if(angle>90&&angle<180) ! Y, S6 i' p) U+ {
DestBitmapWidth=(int)ceil(-minx); % U* s% d* w, f' P# H3 W6 i8 z5 R
else
% O* j5 X+ @* y! G$ T8 rDestBitmapWidth=(int)ceil(maxx-minx); " X" H3 t7 H5 ^& {5 f8 R$ g2 ~
if(angle>-180&&angle<-90)
/ J$ z2 H6 }+ UDestBitmapHeight=(int)ceil(-miny); " Y7 M; o- G/ R) \: J
else ) w, N9 \. o1 `$ S
DestBitmapHeight=(int)ceil(maxy-miny);
7 I! `1 c( ~8 M% A/ [NewPic->Height=DestBitmapHeight;
* l% o: N, z: z" X/ eNewPic->Width=DestBitmapWidth; 7 r' H$ w+ J7 N ?5 a- \
for(int x=0;x<DestBitmapWidth;x++)
7 X9 Q- f1 G. E2 k) v{
- i. ?( }/ W1 l2 q3 Y. e, ^for(int y=0;y<DestBitmapHeight;y++){ 5 ?5 e$ C# \1 j% L
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
( |7 g: ~7 L" V' F0 Uint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); . Q; C- M4 r [& F9 R
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
) P1 [# r+ k3 O; mSrcBitmapy<Source->Height) 9 E' Z, ?- D- G$ S6 E9 }# g
{
7 }0 D/ ?6 E5 b# }NewPic->Canvas-> ixels[x][y]=
5 I. ~& o0 }6 ~3 h: hSource->Canvas-> ixels[SrcBitmapx][SrcBitmapy]; ' v$ W5 z1 f1 F: \( Q, L
}
2 ?! |4 Y T7 l1 |! I}
" q9 L3 ] [- F! F2 o# ^. B} - ~ c" R0 H- E0 k: W Z: T4 G
} |