QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// % f, u- a# \! P1 E{ ) Y) ~$ }4 k- T' O3 @' M8 j if(angle>180)angle=360-angle; # w; g6 e0 K: H/ {. W5 F3 g% z if(angle<-180)angle=360+angle;

1 ^3 z; E) ^7 q F3 [6 Y! E

float radians=(2*3.1416*angle)/360; 4 ?! U+ f* g, `3 N" Xfloat cosine=(float)cos(radians); : H; | k. F- x& O( [, x5 |7 c5 M8 Mfloat sine=(float)sin(radians); * }8 i% M9 @5 F, b. Jfloat Point1x=(-Source->Height*sine); ; n2 e# L" l" e' s% xfloat Point1y=(Source->Height*cosine); 9 u8 t2 k4 X: _) ?) p# }. N/ Ofloat Point2x=(Source->Width*cosine-Source->Height*sine); 0 a, [/ A+ a' O% s" m( Y* X float Point2y=(Source->Height*cosine+Source->Width*sine); 7 X/ S" Y% P7 ?( s* l7 m8 z% Y8 @float Point3x=(Source->Width*cosine); . k- n$ {6 i [3 e, O6 e( V! vfloat Point3y=(Source->Width*sine); ) H; K) Q* N0 X% c* n1 j float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); / R# ~& S2 {' t0 z; o% E2 I6 u D float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); + Z9 T( q- L2 d/ a2 o) P0 v- jfloat maxx=max(Point1x,max(Point2x,Point3x)); $ N2 |5 A. t! ], \& I- U; R' Z8 ffloat maxy=max(Point1y,max(Point2y,Point3y)); 5 [" T9 n) W) K+ U5 |/ W& ]int DestBitmapWidth,DestBitmapHeight; 8 u1 _: l- }- c if(angle>90&&angle<180) : T2 S! W3 t8 k1 E# e; S3 f# ^ m DestBitmapWidth=(int)ceil(-minx); , m( I# f* \& G5 T0 a9 oelse E! m5 U3 W, dDestBitmapWidth=(int)ceil(maxx-minx);

7 T) p6 S* d3 [1 {: V. R/ {1 T

if(angle>-180&&angle<-90) * \3 S! o8 ^: N* x( R DestBitmapHeight=(int)ceil(-miny); x9 e1 i& W1 p/ y% ` else 7 z4 t3 V6 r! O% }3 f7 Z DestBitmapHeight=(int)ceil(maxy-miny);

0 T6 b3 D4 v. \: `; E- u9 N+ C2 F

NewPic->Height=DestBitmapHeight; 9 E6 I6 K4 w4 L1 R1 T: z NewPic->Width=DestBitmapWidth; 1 w; q" B P: b! [; e for(int x=0;x<DestBitmapWidth;x++) - t# m2 h+ B* i" [4 A# u { 6 _" b; ?; v- e/ Lfor(int y=0;y<DestBitmapHeight;y++){ $ g9 L( h5 \6 \7 T- r7 [ z# mint SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); : W. V5 c+ V [1 X int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); / c9 _9 c$ [) Iif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& ; h% l/ U; J7 q& [9 |" g SrcBitmapy<Source->Height) 6 m% v6 }9 _& x0 H2 O { H# _ i) g; |, j0 _, [- q NewPic->Canvas->ixels[x][y]= $ A7 F' [( ~& @6 u/ H: x6 Q Source->Canvas->ixels[SrcBitmapx][SrcBitmapy]; . ?4 d" `: b0 l* K$ p} 0 J# {3 Y% f: }( @1 | } N9 b( R8 x* V& J} % F+ g3 O& [4 u& r( e3 b 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-4-20 05:35 , Processed in 0.422560 second(s), 52 queries .

回顶部