QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// - W+ w9 l) n, P0 z { / w/ Y& E& n) V8 J/ [# Hif(angle>180)angle=360-angle; 4 a9 y4 Y0 P+ D; X% s1 uif(angle<-180)angle=360+angle;

' J' E* V# E" x( ` W+ Z0 M

float radians=(2*3.1416*angle)/360; 2 M- d i9 n3 M: qfloat cosine=(float)cos(radians); , O1 ]0 k( G9 a; Z O. u1 c+ S float sine=(float)sin(radians); & G# O8 _7 l( n0 J# r$ g/ efloat Point1x=(-Source->Height*sine); ! ^4 l/ M+ T. K0 Kfloat Point1y=(Source->Height*cosine); , q, ~9 C/ I6 i' C7 Q# ^/ f* H, D# R3 \float Point2x=(Source->Width*cosine-Source->Height*sine); & ?2 X4 G6 F9 |& }0 z7 |* P0 L9 Pfloat Point2y=(Source->Height*cosine+Source->Width*sine); , V/ m/ w a3 c3 C4 @% P float Point3x=(Source->Width*cosine); 7 ^% D) s6 O3 x; r# L. q7 ]float Point3y=(Source->Width*sine); / i, c! E$ _8 O) c3 kfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 4 s- o" T$ Q5 D- K( b! s float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 2 I* y9 Z6 u! _$ i" s/ V$ _# B float maxx=max(Point1x,max(Point2x,Point3x)); " a1 S Y! O1 O# T8 kfloat maxy=max(Point1y,max(Point2y,Point3y)); & W; ~: y( Y4 G( o& J1 x! ] int DestBitmapWidth,DestBitmapHeight; _0 n+ K, o2 fif(angle>90&&angle<180) / u/ b. I `' `, eDestBitmapWidth=(int)ceil(-minx); : E2 V6 J* p x' t$ Q6 o2 l else : E6 e: b; R5 R. h9 I0 W DestBitmapWidth=(int)ceil(maxx-minx);

& R3 [% _8 c5 m+ M4 e, K( q

if(angle>-180&&angle<-90) ! C6 G2 Y% `) p% C {. q" I/ l DestBitmapHeight=(int)ceil(-miny); 8 B5 f$ ~% u( D+ o' n% pelse ) N- [# Z) F2 g: T4 N, X2 r4 l$ JDestBitmapHeight=(int)ceil(maxy-miny);

! d; i7 U* C% ~$ W' h R3 e8 y

NewPic->Height=DestBitmapHeight; ) e9 `: K3 F% C3 p$ m! F NewPic->Width=DestBitmapWidth; $ y: J7 Y* N1 l& L! ~ b* xfor(int x=0;x<DestBitmapWidth;x++) / T, e2 ^+ @$ P& \7 | { * h }4 g u$ g# d: L. j" [for(int y=0;y<DestBitmapHeight;y++){ 3 Q+ N0 i# W0 v( b& K int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); 4 m6 b5 Q+ E/ E2 B: t d6 Gint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 8 Z8 `$ s2 Z" l6 m3 i( m3 [+ dif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 9 c; i/ J* f, M8 tSrcBitmapy<Source->Height) ! v- d! j( z2 j; i% W& o# L4 H{ " g- Q/ w h) _- ^8 u+ t1 I9 iNewPic->Canvas->ixels[x][y]= {3 n" A& y/ R5 A5 c4 L* m: l, @Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; ( X% v W l4 _/ y* q } j$ _5 V4 H6 O } + o: o7 o% T0 @0 B} 9 B- x4 X4 k5 P; R7 \ }

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-10 22:20 , Processed in 0.358924 second(s), 51 queries .

回顶部