今天图老师小编给大家展示的是任意角度图片旋转,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!
【 tulaoshi.com - 编程语言 】
void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
{
if(angle180)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(angle90&&angle180)
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;xDestBitmapWidth;x++)
{
for(int y=0;yDestBitmapHeight;y++)
{
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
if(SrcBitmapx=0&&SrcBitmapxSource-Width&&SrcBitmapy=0&&
SrcBitmapySource-Height)
{
NewPic-Canvas-Pixels[x][y]=Source-Canvas-Pixels[SrcBitmapx][SrcBitmapy];
}
}
}
}
来源:http://www.tulaoshi.com/n/20160219/1609784.html