QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// u9 K! ~3 p% v4 k5 ~+ P. s5 u { ' _/ w- i- u; Wif(angle>180)angle=360-angle; / h5 C& A z. Q" _+ t1 P if(angle<-180)angle=360+angle;

/ K. t% V. e1 L+ I& @

float radians=(2*3.1416*angle)/360; ' w- y: z8 }$ s! f) H; h1 ^7 ? float cosine=(float)cos(radians); 5 b! U9 d. O& }) ~( `3 l9 @. yfloat sine=(float)sin(radians); : }! S8 b, y+ ], g& qfloat Point1x=(-Source->Height*sine); , C( D! y$ t" F, t9 Y& B float Point1y=(Source->Height*cosine); ( O* u3 ~# _! Q5 c" s Afloat Point2x=(Source->Width*cosine-Source->Height*sine); ! |: ]& ^- y; U+ z% R3 }. R$ T float Point2y=(Source->Height*cosine+Source->Width*sine); ( t. ^3 j; p5 L7 z+ \% ~: y, mfloat Point3x=(Source->Width*cosine); ! M+ O/ Q3 a$ x6 d* Q, S- W8 lfloat Point3y=(Source->Width*sine); : O: r( y! `3 {; q7 l/ T float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 2 L% v( j& D& N" xfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y))); ! H8 }* Y8 y/ o4 H/ ~8 u7 x$ qfloat maxx=max(Point1x,max(Point2x,Point3x)); ) ~8 U5 H% V7 R5 [ float maxy=max(Point1y,max(Point2y,Point3y)); * v* s" [" g/ f3 @' X int DestBitmapWidth,DestBitmapHeight; ' k( o" i( a, { d* J1 U if(angle>90&&angle<180) ! T# h, V2 p/ M5 E" q# J6 c% u DestBitmapWidth=(int)ceil(-minx); - C% j9 q- S( B1 l5 Ielse & r9 q- a- t" \DestBitmapWidth=(int)ceil(maxx-minx);

/ Z C% h8 c# t7 G% |* ^9 h+ h% i

if(angle>-180&&angle<-90) # s& _+ K1 j: i DestBitmapHeight=(int)ceil(-miny); 4 q. |2 Z3 m8 v7 R* x2 ~ else $ L# t0 k7 h& _/ S; h) j DestBitmapHeight=(int)ceil(maxy-miny);

5 E" |# M; R3 x( m+ N3 o

NewPic->Height=DestBitmapHeight; 7 w8 j8 s; s% y/ Y% QNewPic->Width=DestBitmapWidth; # M! n6 d8 w" P' a9 R- j* K for(int x=0;x<DestBitmapWidth;x++) 3 [) ]1 ^; n6 @+ I, _3 g{ 7 K* d/ L; X3 Y: t$ l; @- O ` for(int y=0;y<DestBitmapHeight;y++){ 6 { ] e: C2 Iint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); 3 R4 E1 v; @7 E% c# Y, h0 t' @ int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); ) W: z& i% k, a% Y5 z# }$ c& Gif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 9 u' U6 I. l, _6 H7 N SrcBitmapy<Source->Height) 1 A3 C5 e3 V/ ^+ @' a/ g$ K2 ]{ ) Y2 a8 Z0 T+ G% {/ ^: Q4 c' m NewPic->Canvas->ixels[x][y]= ) G7 {8 k0 _3 [0 Y Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; ! i5 `- V: g# y* A } & l2 N2 I- Z2 _1 q! V1 p} ; l! J. |$ ^* m: V! V* E} 0 ^* G( q+ `3 z4 r5 I. O! d}

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 11:51 , Processed in 0.406233 second(s), 52 queries .

回顶部