📄 mainform.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Mainform.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
#include "math.h"
void RotatePicture(Graphics::TBitmap *SourcePicture,Graphics::TBitmap *DestPicture,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=(-SourcePicture->Height*sine);
float Point1y=(SourcePicture->Height*cosine);
float Point2x=(SourcePicture->Width*cosine-SourcePicture->Height*sine);
float Point2y=(SourcePicture->Height*cosine+SourcePicture->Width*sine);
float Point3x=(SourcePicture->Width*cosine);
float Point3y=(SourcePicture->Width*sine);
float minx=0,miny=0,maxx=0,maxy=0;
minx=Point2x<Point3x?Point2x:Point3x;
minx=minx<Point1x?minx:Point1x;
minx=minx<0?minx:0;
miny=Point2y<Point3y?Point2y:Point3y;
miny=miny<Point1y?miny:Point1y;
miny=miny<0?miny:0;
maxx=Point2x>Point3x?Point2x:Point3x;
maxx=maxx>Point1x?maxx:Point1x;
maxx=maxx>0?maxx:0;
maxy=Point2y>Point3y?Point2y:Point3y;
maxy=maxy>Point1y?maxy:Point1y;
maxy=maxy>0?maxy:0;
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);
DestPicture->Height=DestBitmapHeight;
DestPicture->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<SourcePicture->Width&&SrcBitmapy>=0&&SrcBitmapy<SourcePicture->Height)
{
DestPicture->Canvas->Pixels[x][y]=SourcePicture->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
}
}
}
}
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Graphics::TBitmap *pBmp=new Graphics::TBitmap();
RotatePicture(this->Image1->Picture->Bitmap,pBmp,150);
this->Image1->Picture->Bitmap=pBmp;
delete pBmp;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -