数学建模社区-数学中国

标题: 任意角度图片旋转 [打印本页]

作者: 韩冰    时间: 2005-1-26 12:47
标题: 任意角度图片旋转

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// , S+ F: o: t, L- } X+ i6 s. ]* `" D{ ! B2 `" `4 k- ]' I if(angle>180)angle=360-angle; - C( J0 F% @! p2 i' \ Lif(angle<-180)angle=360+angle;

9 N7 D* R: E) z* M

float radians=(2*3.1416*angle)/360; Q. ?5 m1 B6 R float cosine=(float)cos(radians); , J- N# D6 j7 k9 `/ z float sine=(float)sin(radians); 7 S( Z" _! P6 m1 i2 p8 Pfloat Point1x=(-Source->Height*sine); + N; [% E! E/ b# O float Point1y=(Source->Height*cosine); + B3 F+ [2 s1 r' |float Point2x=(Source->Width*cosine-Source->Height*sine); # [& C; q+ K7 E! t float Point2y=(Source->Height*cosine+Source->Width*sine); 5 w0 X; I: z& s, a" I3 @2 F float Point3x=(Source->Width*cosine); 9 e( J: z+ @# bfloat Point3y=(Source->Width*sine); 1 V4 h8 r- K- B( d float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); $ Q# I' q9 j7 P! x- V: U float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 6 j6 \5 D" G! T/ J% a4 C float maxx=max(Point1x,max(Point2x,Point3x)); . z$ w' L- j0 [float maxy=max(Point1y,max(Point2y,Point3y)); 1 p) g; a# e$ B J7 E: ?9 T+ ~ int DestBitmapWidth,DestBitmapHeight; - c5 y: I- }# @$ L if(angle>90&&angle<180) u9 Y }# e Y/ Q; u( R. n( ? DestBitmapWidth=(int)ceil(-minx); 5 f. A- L: \% J else * V- c. o# R7 ^0 K5 C5 k9 LDestBitmapWidth=(int)ceil(maxx-minx);

/ U6 K$ S' X& }% o% j p/ k4 e

if(angle>-180&&angle<-90) . H. A" e- T9 Y6 Y DestBitmapHeight=(int)ceil(-miny); . V6 C$ X7 a) ^4 X( aelse 6 h7 s( ?% Z8 H- W9 ?: l DestBitmapHeight=(int)ceil(maxy-miny);

, F) T7 t: e, w) j/ H+ y

NewPic->Height=DestBitmapHeight; I6 ?4 n2 A' h$ n4 x NewPic->Width=DestBitmapWidth; * ]0 W, k8 Y1 \& }6 ~, j# t" p for(int x=0;x<DestBitmapWidth;x++) & p7 Q7 l6 Q1 f. M$ a { 1 C: J8 }/ G3 w9 K$ Ofor(int y=0;y<DestBitmapHeight;y++){ 3 r$ c' t4 O0 t2 ]# b# ` r& T, T int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); q: f8 q' N+ l9 \" [7 |7 |! oint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 8 d7 g' [; l, z5 z7 Qif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 1 f/ o3 B# Q) A% q j SrcBitmapy<Source->Height) * k' S6 {$ r: ?" r{ T2 Y2 s3 y# z" X NewPic->Canvas->ixels[x][y]= ) E; @- w5 L9 s; m5 D* H) X Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; & H8 i. r3 q; M( d } & M7 ?% G' D# @ } ( h: d- w5 T( G} " M6 @4 E: ^& n$ D9 ` }






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5