|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
' d& e/ p. V2 g# e& }8 P{ * x5 F* b" @* _
if(angle>180)angle=360-angle; 1 F; f. X5 c8 Y9 O
if(angle<-180)angle=360+angle; : K4 T/ u2 E+ ]2 R+ \: c
float radians=(2*3.1416*angle)/360;
7 ?8 R+ [ C m+ Kfloat cosine=(float)cos(radians);
+ t) s1 a4 K, v5 f0 R$ W; K( tfloat sine=(float)sin(radians);
n- E+ u4 q$ S) |+ P7 _0 C! `float Point1x=(-Source->Height*sine); * n5 m: w; a S6 _% F* F
float Point1y=(Source->Height*cosine);
5 W2 o( x$ a0 B' w: e( u6 ~float Point2x=(Source->Width*cosine-Source->Height*sine); ( D' ^: W5 m! ]* a# ` j
float Point2y=(Source->Height*cosine+Source->Width*sine); % Y2 Z- k5 c: U x( h" h, i* `
float Point3x=(Source->Width*cosine);
5 L) B. [) }2 p& zfloat Point3y=(Source->Width*sine);
( e1 a+ F! |7 S' s. L _6 l( ]float minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
" {5 x ?* P% F4 M3 ?& L, hfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y))); ; u5 J9 Q$ n6 Y6 n9 I
float maxx=max(Point1x,max(Point2x,Point3x));
. j1 a# R* k D5 \$ D7 `9 efloat maxy=max(Point1y,max(Point2y,Point3y));
, L1 V3 O' r' |+ Wint DestBitmapWidth,DestBitmapHeight; ) x9 s- D `% A* a7 Z
if(angle>90&&angle<180)
) }" w, s9 w1 MDestBitmapWidth=(int)ceil(-minx);
' ?! Z4 O, y0 b7 r/ B+ b$ ~else
$ M) R; D' X) i/ R8 W- jDestBitmapWidth=(int)ceil(maxx-minx);
. t$ S1 E+ k& J6 ~& u2 Dif(angle>-180&&angle<-90)
( t- S: @1 b7 hDestBitmapHeight=(int)ceil(-miny);
1 ^0 k: L+ C: ^, f+ _3 zelse
8 E1 ]$ P0 l, x/ w$ ^9 DDestBitmapHeight=(int)ceil(maxy-miny); 2 `5 F- e; z& B
NewPic->Height=DestBitmapHeight; & [! L' A; m( K6 h1 w: D
NewPic->Width=DestBitmapWidth; & H4 P) T6 z6 B2 L" O
for(int x=0;x<DestBitmapWidth;x++) $ t$ X: ]1 W. N2 C# b& E
{ 9 s; z' N( d" p
for(int y=0;y<DestBitmapHeight;y++){
( W% B. A2 s+ b9 f! k& V( o2 Bint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
, G$ } a6 ]' {int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 5 N6 n1 k) f/ U0 i- L+ _: o; w. `
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 6 n& p& m! Z9 |) J. x* T
SrcBitmapy<Source->Height)
- i6 h) K! u/ R4 k. N# l8 j! B: F7 b{
/ Q9 \ Z# W0 v& J" g. Z* hNewPic->Canvas-> ixels[x][y]=
& v4 P& v7 T$ Y9 ASource->Canvas-> ixels[SrcBitmapx][SrcBitmapy];
3 S: A- S, ^5 E2 E6 k# G} 5 M: v9 j2 T. T; M
} ' t2 Y/ e+ U8 v7 H/ U( K8 F
}
9 @$ L9 r# W9 \9 G1 a} |