void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// % m$ \$ f. Y% K+ C( `1 Z7 ~; I { if(angle>180)angle=360-angle; if(angle<-180)angle=360+angle;
$ ]3 Q% v( e3 D, afloat radians=(2*3.1416*angle)/360; 5 | A, {) u2 u$ T4 d1 ?/ | float cosine=(float)cos(radians); float sine=(float)sin(radians); 3 w4 c7 d5 z1 c4 v- Y3 a- J+ G) _ float Point1x=(-Source->Height*sine); 9 v: \' E, _# z) y8 ^5 i float Point1y=(Source->Height*cosine); float Point2x=(Source->Width*cosine-Source->Height*sine); float Point2y=(Source->Height*cosine+Source->Width*sine); 8 x) R" \4 W6 c float Point3x=(Source->Width*cosine); float Point3y=(Source->Width*sine); float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); float maxx=max(Point1x,max(Point2x,Point3x)); * m4 S& p1 D2 R+ y9 O7 _ float maxy=max(Point1y,max(Point2y,Point3y)); / [* P S8 R) `2 k) m/ C. A int DestBitmapWidth,DestBitmapHeight; & j! ]3 U9 @0 n. ?/ E0 ~; J2 T( x8 U if(angle>90&&angle<180) & b8 J: z* [9 w DestBitmapWidth=(int)ceil(-minx); 0 Z: J0 k4 W. i8 N4 l& _- Q+ O else , b: i3 n) ~6 y7 \3 z% ?8 e: q; | DestBitmapWidth=(int)ceil(maxx-minx);
if(angle>-180&&angle<-90) & E8 B' X* s2 ] DestBitmapHeight=(int)ceil(-miny); * q# ~6 l* S; Y6 R5 T' `* l0 C Y else 2 O$ z$ y8 n. ]6 X8 W DestBitmapHeight=(int)ceil(maxy-miny);
NewPic->Height=DestBitmapHeight;
NewPic->Width=DestBitmapWidth; 5 Z' V+ C7 X4 V# R' }
for(int x=0;x<DestBitmapWidth;x++) 7 }: S( n, Y V& @; V
{ 9 _6 j0 z" \2 T) i! y
for(int y=0;y<DestBitmapHeight;y++){
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 2 \7 _' J3 ?; M2 H8 o
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
SrcBitmapy<Source->Height) 5 N% C. f2 U/ L! g+ Y
{
NewPic->Canvas->
ixels[x][y]= : n# }! g \: {/ I1 I. m
Source->Canvas->
ixels[SrcBitmapx][SrcBitmapy]; $ R I5 h6 w& o9 r& b' X
} 4 r+ w4 n& _/ m5 S4 Q% m# n0 O
}
} , A$ d1 x- ^; K+ l6 Q
}
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |