|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
5 b4 L; x) n% r0 u{
* ]0 L9 s! y' a* i8 ]& [; xif(angle>180)angle=360-angle;
/ f: E* U. E, oif(angle<-180)angle=360+angle; o+ U) N/ P. U# _2 Z1 E
float radians=(2*3.1416*angle)/360;
7 g- \ J @- @6 E& vfloat cosine=(float)cos(radians); $ R2 ]3 s B. _+ \
float sine=(float)sin(radians);
, R7 l0 I% M$ Z1 h/ S8 G, i2 ?. jfloat Point1x=(-Source->Height*sine); , ^9 ?; L% h. d) d' d" P
float Point1y=(Source->Height*cosine); ( Q) C7 p% G! k
float Point2x=(Source->Width*cosine-Source->Height*sine);
X* R; Y2 E. G8 h( b1 z. |- Cfloat Point2y=(Source->Height*cosine+Source->Width*sine);
& ?8 E' |2 n0 z' s4 k" T8 x5 pfloat Point3x=(Source->Width*cosine);
: ] I$ b: @4 n2 y9 Wfloat Point3y=(Source->Width*sine);
2 \2 _: l2 q0 Cfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 2 f1 k; u5 y9 s. v! V# ~" o8 w
float miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
3 v) x& \) V- l5 w* o1 }float maxx=max(Point1x,max(Point2x,Point3x)); ' X- Y; v+ n/ q* o* Q
float maxy=max(Point1y,max(Point2y,Point3y));
' Y. ~4 Z5 I4 N* v5 V1 V; c1 _int DestBitmapWidth,DestBitmapHeight;
) ^+ r/ [* `5 f K' h$ Eif(angle>90&&angle<180) ( }1 p+ W4 I% @" c0 {1 n
DestBitmapWidth=(int)ceil(-minx); * R' D' {9 J9 O* o
else . T5 |' S9 f* Q0 X
DestBitmapWidth=(int)ceil(maxx-minx); . U5 t+ I" c' _
if(angle>-180&&angle<-90)
& E$ f# ^" _+ UDestBitmapHeight=(int)ceil(-miny); / w; M/ J k5 x7 {2 i
else
8 h7 x. O& |; x" x, t. _8 c3 C1 Z) B3 Z6 LDestBitmapHeight=(int)ceil(maxy-miny); * q7 z' |' f3 h* R& [* j
NewPic->Height=DestBitmapHeight; 0 }9 P0 ]1 }) Q* T
NewPic->Width=DestBitmapWidth; ) U& }+ f' L/ t+ ?5 Q5 d0 `9 Z0 C
for(int x=0;x<DestBitmapWidth;x++) 3 b1 {' g4 e" |0 ^8 \
{
: G6 N( U6 ^: cfor(int y=0;y<DestBitmapHeight;y++){
" j k f# H. y- dint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); " Q K# h$ ~# l0 @8 J
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 1 B% c4 \2 p' Z/ K% M
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 3 A# K+ W3 r- A: }8 F/ k6 N
SrcBitmapy<Source->Height) 9 p4 a/ r: B! ^. u9 W0 I6 M- |8 h4 I
{
2 F8 ~, K& D: XNewPic->Canvas-> ixels[x][y]=
u5 ?8 p4 l4 R- Z% X& }Source->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
2 H* h. } k" o3 O# |( g1 k+ g}
; D* S1 ]) s, G) ]4 I' f# ~}
0 @) O7 s0 u: h+ T% b) m} : k) \ A" J$ K* g" E/ j! ^: Q! `
} |