QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// t3 t* J4 r2 o1 P# x) V { : J" z- `4 C, n: D# A' Xif(angle>180)angle=360-angle; ; e7 `9 }: P9 _9 I" z if(angle<-180)angle=360+angle;

; Q* i+ Q1 l6 N2 a- L

float radians=(2*3.1416*angle)/360; / P5 Z7 T2 t! X float cosine=(float)cos(radians); , X' j- K) \; D; [9 A& @ float sine=(float)sin(radians); $ b1 N _' p# b6 L& D5 J float Point1x=(-Source->Height*sine); , Q2 q4 y( b7 m% R float Point1y=(Source->Height*cosine); 5 {. }: I: x; A5 Z; [- P; \float Point2x=(Source->Width*cosine-Source->Height*sine); ; E/ {1 i' s( wfloat Point2y=(Source->Height*cosine+Source->Width*sine); : t9 F. d% k3 |; u4 [ float Point3x=(Source->Width*cosine); 5 R9 i. V. u# W, L8 X3 a5 F5 Efloat Point3y=(Source->Width*sine); # Y1 b% V5 P0 G4 Ffloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 0 x# \5 [1 }( p' C5 z% v: J" l float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); " T% u' v& W A6 B% W! T, p5 ufloat maxx=max(Point1x,max(Point2x,Point3x)); 6 e" _5 L# y( W1 q" f! ~ float maxy=max(Point1y,max(Point2y,Point3y)); / y" ?: i: A) D3 L, s5 B8 c8 b2 bint DestBitmapWidth,DestBitmapHeight; + G1 G% L/ Q4 [ u, q1 N: @) W6 qif(angle>90&&angle<180) ) ?: @- q2 @$ x( ? DestBitmapWidth=(int)ceil(-minx); 2 Q" p& s+ \5 n. ~' Celse 7 \7 I$ M. _' } DestBitmapWidth=(int)ceil(maxx-minx);

# M, b2 `& ], Y

if(angle>-180&&angle<-90) $ m# N9 J( S' R DestBitmapHeight=(int)ceil(-miny); 0 w: V: I) a! \0 s/ s. s0 k C; c else 2 X3 k7 t# _/ T- K DestBitmapHeight=(int)ceil(maxy-miny);

$ N0 K+ _" G/ n0 s3 e. P

NewPic->Height=DestBitmapHeight; : I0 O5 T/ a. J0 H NewPic->Width=DestBitmapWidth; - Q( N; T$ _& F) h3 V w8 nfor(int x=0;x<DestBitmapWidth;x++) ' H) r. {) F' ~0 b) j4 o{ 1 V7 v, I1 E8 E2 R1 G for(int y=0;y<DestBitmapHeight;y++){ 6 Y$ E( m4 f+ nint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); ) a+ _, I6 c) m- j% E4 E% y/ wint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); ) Q8 U# \8 W9 ]) c5 ]# Y& s if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& ( C1 m6 G0 K# w2 D2 R$ F, X8 eSrcBitmapy<Source->Height) / q1 W8 _! |2 K9 [/ ` { 3 z& G- r5 D; L9 NNewPic->Canvas->ixels[x][y]= 9 ~# Y7 q. Z! S6 Y8 c5 m2 J. bSource->Canvas->ixels[SrcBitmapx][SrcBitmapy]; : K8 `) Q2 y$ t8 Q _ } : W' f* X9 a; b9 I} / B7 o& q+ Z8 |) Q% Z5 k1 L; X } # {. J2 t5 o [1 U }

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 18:06 , Processed in 0.375179 second(s), 52 queries .

回顶部