QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// $ ^/ |, t L8 w/ i2 u* l7 t E1 U{ $ o$ G+ A6 x. z- ?. d6 v/ R/ C if(angle>180)angle=360-angle; 7 I+ t. @# h! f; p7 P! p7 { if(angle<-180)angle=360+angle;

) S4 b0 Z# }7 b/ c( w6 Y* P

float radians=(2*3.1416*angle)/360; + }3 l3 M/ B( Q4 G; [3 vfloat cosine=(float)cos(radians); 2 w! Y4 z0 W) J0 @& ?; a$ \2 u# k float sine=(float)sin(radians); 4 Y# p# A g- u6 A1 M- J: \; e float Point1x=(-Source->Height*sine); " o) X! @& r$ A$ Y9 Tfloat Point1y=(Source->Height*cosine); 1 P/ o% R. v* R2 M float Point2x=(Source->Width*cosine-Source->Height*sine); + o6 z. @2 {! Yfloat Point2y=(Source->Height*cosine+Source->Width*sine); - y: w, q- o/ z8 [7 r6 c4 @ float Point3x=(Source->Width*cosine); 1 I( X& \5 S7 ?+ Q" \! r3 h' yfloat Point3y=(Source->Width*sine); - R Q( w; w0 V float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); - c0 `0 E7 N& l8 R. a* Hfloat miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 1 w2 A* `* S7 z) V4 Dfloat maxx=max(Point1x,max(Point2x,Point3x)); 4 b2 j# y+ K( @' c K! }" h! l float maxy=max(Point1y,max(Point2y,Point3y)); ; @- ]$ y: D+ I& O( u int DestBitmapWidth,DestBitmapHeight; 0 Y! o" I8 T/ n7 |2 t: ^# n9 rif(angle>90&&angle<180) 0 o: ?7 S: c& y/ r5 b DestBitmapWidth=(int)ceil(-minx); : S. k4 d- w! g+ V else 3 y; ?0 ~1 ` I DestBitmapWidth=(int)ceil(maxx-minx);

$ N4 k- |; w# q, C1 D% i. i. S2 ]

if(angle>-180&&angle<-90) % H8 H' r+ h$ I& B: @% s DestBitmapHeight=(int)ceil(-miny); ( c" Y% m1 I( r; e$ e9 ]+ f else 2 v- t8 W6 y9 B+ O; R DestBitmapHeight=(int)ceil(maxy-miny);

1 f2 M0 F" W) X4 R5 w& M) d

NewPic->Height=DestBitmapHeight; 5 `9 p+ W& C! C; P' `4 v R) SNewPic->Width=DestBitmapWidth; # h |. {/ i! ^/ ]5 _for(int x=0;x<DestBitmapWidth;x++) $ o- f$ ~: T, M) `( \$ S* D& \{ . ?, ` h) Y j# f! e5 g; v for(int y=0;y<DestBitmapHeight;y++){ 4 T' b" I2 Q; P; s; d7 f int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); 4 q) E! z6 c. o. h) x$ |+ v! pint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 7 L5 n$ P4 W$ s3 g, b, P if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& & [5 e+ S6 f0 u6 F SrcBitmapy<Source->Height) / G+ j; K/ c2 S9 {{ * m& Y* N1 i- z' ?7 t NewPic->Canvas->ixels[x][y]= 1 h, `% v; s' B+ i Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; % Q" l" X. l0 a- H } ! w+ k$ Y/ B' i( X5 C, K} ! m/ W, Z4 Z3 B, N } : W" n' E, V& S( J1 A) m; |/ q}

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-14 05:49 , Processed in 1.544838 second(s), 52 queries .

回顶部