QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// , s8 w( r2 ?' Q" m( W0 r! i{ ' d, h* u5 Z4 }0 ?0 j if(angle>180)angle=360-angle; 8 D- [' U3 W7 G/ l/ Z# p) L if(angle<-180)angle=360+angle;

$ p( _% S5 n9 i* G- z( T

float radians=(2*3.1416*angle)/360; # H% ]1 l8 O2 X. N$ \) e: h0 i y- E# Mfloat cosine=(float)cos(radians); ( M; v5 [/ R( D4 U; k1 N" U float sine=(float)sin(radians); # h2 D: |% [. a8 q& p( F float Point1x=(-Source->Height*sine); 2 R6 m' h# }+ D4 T* D- Afloat Point1y=(Source->Height*cosine); 4 P) {3 P) Y; Sfloat Point2x=(Source->Width*cosine-Source->Height*sine); * P- {$ f2 l6 f) t* v4 n3 Z* H float Point2y=(Source->Height*cosine+Source->Width*sine); 7 ~9 c: k7 s* c1 ]; C# zfloat Point3x=(Source->Width*cosine); $ O0 `7 v7 ^5 y @1 R0 v$ j" Y float Point3y=(Source->Width*sine); 2 `& X- \/ Y& G' g# zfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 7 \/ L" S6 p7 nfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y))); ( d2 y! M) n m$ ?7 h, t/ t4 Tfloat maxx=max(Point1x,max(Point2x,Point3x)); 0 _/ J G/ z6 afloat maxy=max(Point1y,max(Point2y,Point3y)); % g* Q7 k4 y6 n8 W1 uint DestBitmapWidth,DestBitmapHeight; 0 U, D) s/ u+ F3 F' c( I2 Mif(angle>90&&angle<180) 5 `0 h3 G% R9 T; E9 h DestBitmapWidth=(int)ceil(-minx); ! G% x/ R# d% _- b9 @ else & X: x4 ?8 G, } y7 _% T6 G' u DestBitmapWidth=(int)ceil(maxx-minx);

- X0 i* k R0 Y2 @& D) b1 ]

if(angle>-180&&angle<-90) : E+ t2 B* C: `$ N$ a, j) S DestBitmapHeight=(int)ceil(-miny); 2 h( f8 U( J+ }! w8 F B. q" m& Delse , V7 o4 u! D" c. S7 [9 k DestBitmapHeight=(int)ceil(maxy-miny);

1 G$ h4 h( w' C1 B) N+ k

NewPic->Height=DestBitmapHeight; 6 @/ j0 x" A! N9 M1 q8 E2 x NewPic->Width=DestBitmapWidth; 2 W" E4 [, {- Xfor(int x=0;x<DestBitmapWidth;x++) 1 O; }6 r* A0 I: R! g { 7 |9 u4 Y, `, ]) L! ]5 l4 K) x for(int y=0;y<DestBitmapHeight;y++){ - I5 g |8 e( p8 y6 Kint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); ' R2 ~- l3 i" aint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); . f0 K* \4 |/ ^) y3 `; jif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& . d" ?" o! Y+ K, ]% {: LSrcBitmapy<Source->Height) ( w; p' U% C {{ N8 @, q- ~5 x+ WNewPic->Canvas->ixels[x][y]= ) e a8 a4 ^; H6 L7 A' n Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; 5 S+ l3 X* ^- ]* ?3 z3 Z5 h} # U. O. E0 f. \. M. [' S+ C } ( p' z! l W# [" G6 i4 g} 7 k( W& P3 l- E7 b1 [, u; ~0 B }

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-6-11 05:41 , Processed in 0.410700 second(s), 51 queries .

回顶部