QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// & T, l9 _4 p0 ?( f6 y{ 7 C, Y6 z# g \if(angle>180)angle=360-angle; - ~0 O" i3 L" ]" Vif(angle<-180)angle=360+angle;

" V$ j3 [+ M- f4 v l5 i

float radians=(2*3.1416*angle)/360; # H5 k( f1 ^9 j9 M float cosine=(float)cos(radians); $ ^9 W) m" N2 b7 T0 x! mfloat sine=(float)sin(radians); z# t6 \* ^/ S& p8 {* xfloat Point1x=(-Source->Height*sine); 1 m; {; m7 Y/ A' E& g: h* Q4 Ofloat Point1y=(Source->Height*cosine); ( X. N' [ q4 X! r \; ?5 P% U float Point2x=(Source->Width*cosine-Source->Height*sine); + }- Z) m* n* }& B float Point2y=(Source->Height*cosine+Source->Width*sine); ( E6 b0 Z- y, \; _. l/ V float Point3x=(Source->Width*cosine); 3 f( {* `% X9 m4 o; A; ~- afloat Point3y=(Source->Width*sine); % f u+ Q& ^( Z! v float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); : t0 H. K7 B6 [' }: f7 @ float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); - [3 e3 J+ J4 t! p* C( zfloat maxx=max(Point1x,max(Point2x,Point3x)); . h4 Z# ?5 b: }1 ]% |- }4 Ifloat maxy=max(Point1y,max(Point2y,Point3y)); 9 D5 j. s9 I2 ^( C" Pint DestBitmapWidth,DestBitmapHeight; ! N5 M; E+ y0 A( ^) ?. q! x if(angle>90&&angle<180) + Y# L! E( q1 g% F/ N- d5 ~; a DestBitmapWidth=(int)ceil(-minx); l k {" `# Y- m* f6 ]else " ~, E2 q! ~3 r7 rDestBitmapWidth=(int)ceil(maxx-minx);

+ Q: u T* @5 R* \4 J; c

if(angle>-180&&angle<-90) 2 }' I; X! \, y! V) Q# R6 X4 V DestBitmapHeight=(int)ceil(-miny); # r {" R7 M5 e0 p' Q6 q8 `else : p/ f5 t6 P4 M+ x( {, {/ ^. G8 XDestBitmapHeight=(int)ceil(maxy-miny);

8 A3 j9 [6 l- _$ f3 q

NewPic->Height=DestBitmapHeight; : e8 L$ Y6 S1 n2 V NewPic->Width=DestBitmapWidth; " { H5 ]) R) ?7 t for(int x=0;x<DestBitmapWidth;x++) * M7 `& S. Y& }( r5 ~{ 8 w% W" w' \7 T& M0 q- C for(int y=0;y<DestBitmapHeight;y++){ - q6 `2 D7 K9 q; m$ pint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); * r4 w/ |2 a$ I9 l' mint SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 6 m7 M6 F q- ~8 Q. u1 @ if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 9 I# V4 _& Z9 h* O9 t" t4 JSrcBitmapy<Source->Height) 6 v3 b1 }1 f" y7 A4 N { 0 s$ l4 a8 F0 i NewPic->Canvas->ixels[x][y]= 9 A1 J$ W# ]8 p Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; 9 ^; F" x) O: ]1 ]+ l+ s: H1 ?) X} 1 k; C" z0 ~# e" l" r: E6 K- P \ } * ?7 ]- T( ]2 g& f9 J6 ^' [} # l; g. L# k, E, S}

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

回顶部