|
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// 8 v9 u$ r/ J' o$ K6 q
{
: B& M# ^; e/ X# Iif(angle>180)angle=360-angle; 5 D9 u% `- I2 }7 k0 b. w
if(angle<-180)angle=360+angle;
3 {" p; J9 O# M( [# S+ f$ y3 {float radians=(2*3.1416*angle)/360;
- X' M; ?3 H1 Y6 G3 V3 H0 \# a8 }: Wfloat cosine=(float)cos(radians);
* G6 ?3 k, W1 ?. L* Q- Wfloat sine=(float)sin(radians);
( c) I3 ^( r- T% Y& h: \float Point1x=(-Source->Height*sine);
H2 ?3 {% J& i mfloat Point1y=(Source->Height*cosine); . B% p9 r* m( q, n
float Point2x=(Source->Width*cosine-Source->Height*sine); % q8 q; v2 q3 m* x3 W$ @
float Point2y=(Source->Height*cosine+Source->Width*sine); 6 d& v* D5 a8 u0 y2 l# ^
float Point3x=(Source->Width*cosine); ) E1 O! h1 u3 E$ m6 A
float Point3y=(Source->Width*sine);
8 L$ g4 @1 F+ F% Z2 ~* p, X4 bfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 3 r, f6 N! Y' }8 t* Q
float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 5 r+ T E! l6 f; h8 f4 i$ M8 c6 f
float maxx=max(Point1x,max(Point2x,Point3x));
5 i9 j0 D# K- E) n7 w' p( Zfloat maxy=max(Point1y,max(Point2y,Point3y)); . s$ s: T4 Z; q1 u- e
int DestBitmapWidth,DestBitmapHeight; % g2 M" ~' L* K' R$ O
if(angle>90&&angle<180) 8 M9 c' O: x8 i
DestBitmapWidth=(int)ceil(-minx);
$ K5 j0 G1 z, M: X% relse
6 ]5 ^* B3 y% d5 RDestBitmapWidth=(int)ceil(maxx-minx); ) r3 B# R+ w$ h! V: |7 e4 T) v0 t8 Q
if(angle>-180&&angle<-90)
# S0 J0 `' v* p! iDestBitmapHeight=(int)ceil(-miny);
" K3 C$ y k+ l( M8 u [else / O* c6 c3 J% S
DestBitmapHeight=(int)ceil(maxy-miny); 1 g' V8 m! ~$ G) W8 n
NewPic->Height=DestBitmapHeight;
9 G( r) Y! ^- w7 y4 L; Y1 I6 ONewPic->Width=DestBitmapWidth;
4 x% R8 p+ @( bfor(int x=0;x<DestBitmapWidth;x++)
+ R, ?* c' c+ A; u1 y& @! b{
0 L# ?9 [4 e: U# @" ~for(int y=0;y<DestBitmapHeight;y++){ 9 o% x% M* s" Y+ s/ H$ X8 J9 d U
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); % @: D' M8 w: n2 ~5 c
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
5 y* F; H- T, L _4 e" uif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 3 @3 ?6 ?" C* D
SrcBitmapy<Source->Height) 2 A: b0 M. A/ i5 c7 x
{
. m* }: D5 H& ?* L( T' `NewPic->Canvas-> ixels[x][y]=
! c4 O8 O# A- BSource->Canvas-> ixels[SrcBitmapx][SrcBitmapy]; ! u' `$ q, C& b
} + h1 ~& d& P3 U4 L
}
6 R) d: D! \' p} 4 P5 U0 k3 F: Y1 G( i7 z0 D
} |