QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// 5 b4 L; x) n% r0 u{ * ]0 L9 s! y' a* i8 ]& [; xif(angle>180)angle=360-angle; / f: E* U. E, oif(angle<-180)angle=360+angle;

o+ U) N/ P. U# _2 Z1 E

float radians=(2*3.1416*angle)/360; 7 g- \ J @- @6 E& vfloat cosine=(float)cos(radians); $ R2 ]3 s B. _+ \ float sine=(float)sin(radians); , R7 l0 I% M$ Z1 h/ S8 G, i2 ?. jfloat Point1x=(-Source->Height*sine); , ^9 ?; L% h. d) d' d" P float Point1y=(Source->Height*cosine); ( Q) C7 p% G! k float Point2x=(Source->Width*cosine-Source->Height*sine); X* R; Y2 E. G8 h( b1 z. |- Cfloat Point2y=(Source->Height*cosine+Source->Width*sine); & ?8 E' |2 n0 z' s4 k" T8 x5 pfloat Point3x=(Source->Width*cosine); : ] I$ b: @4 n2 y9 Wfloat Point3y=(Source->Width*sine); 2 \2 _: l2 q0 Cfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 2 f1 k; u5 y9 s. v! V# ~" o8 w float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 3 v) x& \) V- l5 w* o1 }float maxx=max(Point1x,max(Point2x,Point3x)); ' X- Y; v+ n/ q* o* Q float maxy=max(Point1y,max(Point2y,Point3y)); ' Y. ~4 Z5 I4 N* v5 V1 V; c1 _int DestBitmapWidth,DestBitmapHeight; ) ^+ r/ [* `5 f K' h$ Eif(angle>90&&angle<180) ( }1 p+ W4 I% @" c0 {1 n DestBitmapWidth=(int)ceil(-minx); * R' D' {9 J9 O* o else . T5 |' S9 f* Q0 X DestBitmapWidth=(int)ceil(maxx-minx);

. U5 t+ I" c' _

if(angle>-180&&angle<-90) & E$ f# ^" _+ UDestBitmapHeight=(int)ceil(-miny); / w; M/ J k5 x7 {2 i else 8 h7 x. O& |; x" x, t. _8 c3 C1 Z) B3 Z6 LDestBitmapHeight=(int)ceil(maxy-miny);

* q7 z' |' f3 h* R& [* j

NewPic->Height=DestBitmapHeight; 0 }9 P0 ]1 }) Q* T NewPic->Width=DestBitmapWidth; ) U& }+ f' L/ t+ ?5 Q5 d0 `9 Z0 C for(int x=0;x<DestBitmapWidth;x++) 3 b1 {' g4 e" |0 ^8 \ { : G6 N( U6 ^: cfor(int y=0;y<DestBitmapHeight;y++){ " j k f# H. y- dint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); " Q K# h$ ~# l0 @8 J int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 1 B% c4 \2 p' Z/ K% M if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 3 A# K+ W3 r- A: }8 F/ k6 N SrcBitmapy<Source->Height) 9 p4 a/ r: B! ^. u9 W0 I6 M- |8 h4 I { 2 F8 ~, K& D: XNewPic->Canvas->ixels[x][y]= u5 ?8 p4 l4 R- Z% X& }Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; 2 H* h. } k" o3 O# |( g1 k+ g} ; D* S1 ]) s, G) ]4 I' f# ~} 0 @) O7 s0 u: h+ T% b) m} : k) \ A" J$ K* g" E/ j! ^: 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-10 23:37 , Processed in 0.394853 second(s), 51 queries .

回顶部