QQ登录

只需要一步,快速开始

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

任意角度图片旋转

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// 8 v9 u$ r/ J' o$ K6 q { : B& M# ^; e/ X# Iif(angle>180)angle=360-angle; 5 D9 u% `- I2 }7 k0 b. w if(angle<-180)angle=360+angle;

3 {" p; J9 O# M( [# S+ f$ y3 {

float radians=(2*3.1416*angle)/360; - X' M; ?3 H1 Y6 G3 V3 H0 \# a8 }: Wfloat cosine=(float)cos(radians); * G6 ?3 k, W1 ?. L* Q- Wfloat sine=(float)sin(radians); ( c) I3 ^( r- T% Y& h: \float Point1x=(-Source->Height*sine); H2 ?3 {% J& i mfloat Point1y=(Source->Height*cosine); . B% p9 r* m( q, n float Point2x=(Source->Width*cosine-Source->Height*sine); % q8 q; v2 q3 m* x3 W$ @ float Point2y=(Source->Height*cosine+Source->Width*sine); 6 d& v* D5 a8 u0 y2 l# ^ float Point3x=(Source->Width*cosine); ) E1 O! h1 u3 E$ m6 A float Point3y=(Source->Width*sine); 8 L$ g4 @1 F+ F% Z2 ~* p, X4 bfloat minx=min((float)0,min(Point1x,min(Point2x,Point3x))); 3 r, f6 N! Y' }8 t* Q float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 5 r+ T E! l6 f; h8 f4 i$ M8 c6 f float maxx=max(Point1x,max(Point2x,Point3x)); 5 i9 j0 D# K- E) n7 w' p( Zfloat maxy=max(Point1y,max(Point2y,Point3y)); . s$ s: T4 Z; q1 u- e int DestBitmapWidth,DestBitmapHeight; % g2 M" ~' L* K' R$ O if(angle>90&&angle<180) 8 M9 c' O: x8 i DestBitmapWidth=(int)ceil(-minx); $ K5 j0 G1 z, M: X% relse 6 ]5 ^* B3 y% d5 RDestBitmapWidth=(int)ceil(maxx-minx);

) r3 B# R+ w$ h! V: |7 e4 T) v0 t8 Q

if(angle>-180&&angle<-90) # S0 J0 `' v* p! iDestBitmapHeight=(int)ceil(-miny); " K3 C$ y k+ l( M8 u [else / O* c6 c3 J% S DestBitmapHeight=(int)ceil(maxy-miny);

1 g' V8 m! ~$ G) W8 n

NewPic->Height=DestBitmapHeight; 9 G( r) Y! ^- w7 y4 L; Y1 I6 ONewPic->Width=DestBitmapWidth; 4 x% R8 p+ @( bfor(int x=0;x<DestBitmapWidth;x++) + R, ?* c' c+ A; u1 y& @! b{ 0 L# ?9 [4 e: U# @" ~for(int y=0;y<DestBitmapHeight;y++){ 9 o% x% M* s" Y+ s/ H$ X8 J9 d U int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine); % @: D' M8 w: n2 ~5 c int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine); 5 y* F; H- T, L _4 e" uif(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 3 @3 ?6 ?" C* D SrcBitmapy<Source->Height) 2 A: b0 M. A/ i5 c7 x { . m* }: D5 H& ?* L( T' `NewPic->Canvas->ixels[x][y]= ! c4 O8 O# A- BSource->Canvas->ixels[SrcBitmapx][SrcBitmapy]; ! u' `$ q, C& b } + h1 ~& d& P3 U4 L } 6 R) d: D! \' p} 4 P5 U0 k3 F: Y1 G( i7 z0 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 10:20 , Processed in 0.382910 second(s), 52 queries .

回顶部