数学建模社区-数学中国

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

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// 5 f4 W8 F! f& {6 A8 {3 E { ! J/ o6 t# n0 G1 q- E8 \- Iif(angle>180)angle=360-angle; ) P2 H2 |) y% x3 n9 h; m. Oif(angle<-180)angle=360+angle;

- ^" F+ {# |" g, j

float radians=(2*3.1416*angle)/360; $ r4 x6 ]( C* F7 afloat cosine=(float)cos(radians); ; ]* V5 z" L" O A5 C4 Bfloat sine=(float)sin(radians); " N* @, @) i1 U* `% t float Point1x=(-Source->Height*sine); + s# Z% y, e2 C float Point1y=(Source->Height*cosine); % ]$ a( e" S2 f; N1 ffloat Point2x=(Source->Width*cosine-Source->Height*sine); % s% d# n! W9 I4 W& F5 L float Point2y=(Source->Height*cosine+Source->Width*sine); / `/ D- h, W' |: [! ~# i( i* D6 xfloat Point3x=(Source->Width*cosine); % r8 O! o$ [& U' O float Point3y=(Source->Width*sine); * X2 ^8 l- T& H% p/ q E% Pfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); / _/ t$ E, G9 V7 {float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 9 H" L) _/ v# d# \float maxx=max(Point1x,max(Point2x,Point3x)); ' ?3 K) {% n, u# b9 Nfloat maxy=max(Point1y,max(Point2y,Point3y)); f1 Y1 W. M, R7 Y- D int DestBitmapWidth,DestBitmapHeight; & T/ n! l9 M9 n9 wif(angle>90&&angle<180) 9 ?/ w' y! {; B( PDestBitmapWidth=(int)ceil(-minx); ( N6 H" l7 E3 W* H2 ` else $ E( f* p/ d" r j0 N2 w+ z DestBitmapWidth=(int)ceil(maxx-minx);

/ L4 l; K4 }: x* F2 G

if(angle>-180&&angle<-90) 2 p6 v3 \, J. E& B2 b; }' x3 g DestBitmapHeight=(int)ceil(-miny); # M2 V7 K, p9 `0 K# y3 Welse ' N, K* J0 j3 E' p DestBitmapHeight=(int)ceil(maxy-miny);

+ U. t* R) `8 ^8 z% `& a3 ?" _

NewPic->Height=DestBitmapHeight; + g7 O+ c+ N5 v; BNewPic->Width=DestBitmapWidth; ' ^5 z6 _% u9 C- G. w4 Vfor(int x=0;x<DestBitmapWidth;x++) 1 Y8 p1 z, r; _+ f{ # v( [- c' E* L$ q2 Bfor(int y=0;y<DestBitmapHeight;y++){ * `* A: u+ t0 C; i3 l; Lint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); 1 I3 f/ H5 Z# F$ lint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 4 t( b0 N, P% C# tif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& * G! N' v+ W a+ w3 k4 L5 w1 iSrcBitmapy<Source->Height) / Q# v- F& `4 `- ~0 N4 b9 y { 4 x& g. h+ n1 v8 s; Y, L NewPic->Canvas->ixels[x][y]= ) Y4 g9 R/ `5 n6 }9 WSource->Canvas->ixels[SrcBitmapx][SrcBitmapy]; 6 f9 b' Z! Q/ J0 S# \ } N6 Y8 F% A' |2 M9 T) R# t3 f3 S } % E+ U9 |1 a% k } % d7 `) Q* {5 _ }






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