QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2537|回复: 0
打印 上一主题 下一主题

任意角度图片旋转

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:47 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// . C' \" M9 R* _- d8 S { }7 L4 T, Q( {' S9 c' K& ~ if(angle>180)angle=360-angle; ' N3 j) [: T! s5 X: P! P+ Qif(angle<-180)angle=360+angle;

1 j$ N# X( s! k

float radians=(2*3.1416*angle)/360; 0 F/ ]+ M, ?+ L2 \5 m% I! K# ]3 n. G float cosine=(float)cos(radians); - ?, Q( F1 Q5 k; C- {, s0 _float sine=(float)sin(radians); ; ~& e4 z" y& M, Y, c$ lfloat Point1x=(-Source->Height*sine); 6 R0 B- S" u: O; }9 ` float Point1y=(Source->Height*cosine); . Z% l. o0 b5 N* S q, C$ pfloat Point2x=(Source->Width*cosine-Source->Height*sine); 1 M J$ o, Y/ _ a6 N* _3 \ float Point2y=(Source->Height*cosine+Source->Width*sine); - U8 X' r0 n, o6 v6 L) l3 o1 K float Point3x=(Source->Width*cosine); , S5 N3 P F) d% z' I float Point3y=(Source->Width*sine); 7 j+ S( A( }- w2 c float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); . ]; {! Q7 ]* E. Y: U: i- rfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y))); " u H/ a9 g3 m: _7 |3 dfloat maxx=max(Point1x,max(Point2x,Point3x)); * F% K- w% Q+ X4 U( Wfloat maxy=max(Point1y,max(Point2y,Point3y)); + M, N X% P* [& Lint DestBitmapWidth,DestBitmapHeight; - V; I, T/ p+ V/ [3 `if(angle>90&&angle<180) * n& S) {0 f8 S/ k* J- _8 GDestBitmapWidth=(int)ceil(-minx); , c$ ~9 `7 y H& O& \0 @3 [' v else # z1 F3 P/ o0 u" B DestBitmapWidth=(int)ceil(maxx-minx);

- S( S4 J# ?8 c) B

if(angle>-180&&angle<-90) ' @1 r& n- s# a5 p3 P4 i; QDestBitmapHeight=(int)ceil(-miny); , O7 T6 Y/ a d6 ~8 E- Q/ ] else $ {) E" ~, r" c# n) u, c s# O DestBitmapHeight=(int)ceil(maxy-miny);

. ^- k" D0 v/ y% Q8 Q& i) b

NewPic->Height=DestBitmapHeight; : N1 U' H( `1 L! A) O$ kNewPic->Width=DestBitmapWidth; $ e, d/ K! K% ^. U. J' x for(int x=0;x<DestBitmapWidth;x++) & }: |% F" K& a% }* g2 D{ & |2 F* o3 i0 w* a for(int y=0;y<DestBitmapHeight;y++){ * J/ Z- c& @8 P. ]' z! [ int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); % Y% O: J7 U |" b! P int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); " A( j/ J* h0 z) V3 S: x7 O if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 6 i+ l1 n" b9 n5 |5 s8 p3 s# j SrcBitmapy<Source->Height) 4 G4 z- E" d" Y. ?2 h2 M { $ @ @! l+ H3 h7 M1 Z2 |: UNewPic->Canvas->ixels[x][y]= 8 z/ g, g4 Z2 k: w8 a. ESource->Canvas->ixels[SrcBitmapx][SrcBitmapy]; ' `5 s; b/ j7 _7 _9 c( S} 1 B Q# K/ F4 [- R6 r& X/ { } ' Q2 U/ G* O* C4 q} / ?' v; ?( b1 @/ E5 s; y }

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-18 11:52 , Processed in 0.394560 second(s), 52 queries .

回顶部