⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cpp

📁 C++ BUILDER精彩编程实例集锦(源码)2 第三部分 文件操作 第四部分 图像处理
💻 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 + -