c++Builder图片旋转代码

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.14115926*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];
        }
      }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值