QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// # v( @& H# S. u{ 8 ]8 W& a2 K" g0 O4 V1 V if(angle>180)angle=360-angle; 6 f3 D Z' D8 d) ?/ ?: mif(angle<-180)angle=360+angle;

, c2 @- _9 F5 {6 Y0 a# L

float radians=(2*3.1416*angle)/360; 4 K+ r* t- S$ `0 W float cosine=(float)cos(radians); : f# b2 n0 e, j$ x! X8 Bfloat sine=(float)sin(radians); * o# l, W0 ^" x$ z/ h# N4 K float Point1x=(-Source->Height*sine); & j" p. ~8 o! Hfloat Point1y=(Source->Height*cosine); {% k2 j+ H( B4 _, b float Point2x=(Source->Width*cosine-Source->Height*sine); l7 j& t3 }5 k* f. o float Point2y=(Source->Height*cosine+Source->Width*sine); - t6 o: l) S& U( S7 {- s* ufloat Point3x=(Source->Width*cosine); ( s$ G* J5 O# S% ^) |float Point3y=(Source->Width*sine); " N: d- b6 V0 [; ]6 H" F1 Ofloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 4 S* _) {# y; a( R! Efloat miny=min((float)0,min(Point1y,min(Point2y,Point3y))); & h: T5 Y6 | s4 }$ M Q; Cfloat maxx=max(Point1x,max(Point2x,Point3x)); / j3 ^8 Z) ^) Q$ [8 \2 ] float maxy=max(Point1y,max(Point2y,Point3y)); / x9 X" \% d5 f; R2 D( qint DestBitmapWidth,DestBitmapHeight; 2 e2 f H" g( A% o if(angle>90&&angle<180) ! Y, S6 i' p) U+ { DestBitmapWidth=(int)ceil(-minx); % U* s% d* w, f' P# H3 W6 i8 z5 R else % O* j5 X+ @* y! G$ T8 rDestBitmapWidth=(int)ceil(maxx-minx);

" X" H3 t7 H5 ^& {5 f8 R$ g2 ~

if(angle>-180&&angle<-90) / J$ z2 H6 }+ UDestBitmapHeight=(int)ceil(-miny); " Y7 M; o- G/ R) \: J else ) w, N9 \. o1 `$ S DestBitmapHeight=(int)ceil(maxy-miny);

7 I! `1 c( ~8 M% A/ [

NewPic->Height=DestBitmapHeight; * l% o: N, z: z" X/ eNewPic->Width=DestBitmapWidth; 7 r' H$ w+ J7 N ?5 a- \ for(int x=0;x<DestBitmapWidth;x++) 7 X9 Q- f1 G. E2 k) v{ - i. ?( }/ W1 l2 q3 Y. e, ^for(int y=0;y<DestBitmapHeight;y++){ 5 ?5 e$ C# \1 j% L int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); ( |7 g: ~7 L" V' F0 Uint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); . Q; C- M4 r [& F9 R if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& ) P1 [# r+ k3 O; mSrcBitmapy<Source->Height) 9 E' Z, ?- D- G$ S6 E9 }# g { 7 }0 D/ ?6 E5 b# }NewPic->Canvas->ixels[x][y]= 5 I. ~& o0 }6 ~3 h: hSource->Canvas->ixels[SrcBitmapx][SrcBitmapy]; ' v$ W5 z1 f1 F: \( Q, L } 2 ?! |4 Y T7 l1 |! I} " q9 L3 ] [- F! F2 o# ^. B} - ~ c" R0 H- E0 k: W Z: T4 G }

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-8-10 03:07 , Processed in 0.490491 second(s), 52 queries .

回顶部