如何将一个图片旋转?

zhaoxinghan 2007-07-16 09:55:46
我需要在一个项目中根据用户输入角度旋转一副图片,现在还没想好这个图片是自己用现成的还是利用代码画,如果用现成的图片应该怎么实现?如果自己利用代码绘制又如何实现呢?哪种容易一些?图片类似一个雷达的显示图像。
...全文
308 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_love_pc 2007-07-17
  • 打赏
  • 举报
回复
http://www.woask.cn/Postings/164877/
jacknes009 2007-07-17
  • 打赏
  • 举报
回复
看看吧,我试过可以
void TForm1::S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// 旋转
{
if(angle>180)angle=360-angle;
if(angle<-180)angle=360+angle;

float radians=(2*3.1416*angle)/360;
float cosine=(float)cos(radians);
float sine=(float)sin(radians);
float Point1x=(-Source->Height*sine);
float Point1y=(Source->Height*cosine);
float Point2x=(Source->Width*cosine-Source->Height*sine);
float Point2y=(Source->Height*cosine+Source->Width*sine);
float Point3x=(Source->Width*cosine);
float Point3y=(Source->Width*sine);
float minx=min((float)0,min(Point1x,min(Point2x,Point3x)));
float miny=min((float)0,min(Point1y,min(Point2y,Point3y)));
float maxx=max(Point1x,max(Point2x,Point3x));
float maxy=max(Point1y,max(Point2y,Point3y));
int DestBitmapWidth,DestBitmapHeight;
if(angle>90&&angle<180)
DestBitmapWidth=(int)ceil(-minx);
else
DestBitmapWidth=(int)ceil(maxx-minx);

if(angle>-180&&angle<-90)
DestBitmapHeight=(int)ceil(-miny);
else
DestBitmapHeight=(int)ceil(maxy-miny);

NewPic->Height=DestBitmapHeight;
NewPic->Width=DestBitmapWidth;
for(int x=0;x<DestBitmapWidth;x++)
{
for(int y=0;y<DestBitmapHeight;y++)
{
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&&
SrcBitmapy<Source->Height)
{
NewPic->Canvas->Pixels[x][y]=Source->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
}
}
}
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧