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

📄 unit1.pas

📁 图片
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, Math;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    bmpRotate: TButton;
    Image1: TImage;
    Image2: TImage;
    procedure bmpRotateClick(Sender: TObject);
    procedure bmp_rotate(src,dst:tbitmap;angle:extended);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.bmp_rotate(src,dst:tbitmap;angle:extended);
var
  c1x,c1y,c2x,c2y:integer;
  p1x,p1y,p2x,p2y:integer;
  radius,n:integer;
  alpha:extended;
  c0,c1,c2,c3:tcolor;
begin
   //calculate the angle to pi-format
  angle := (angle / 180) * pi;

   // calculate the central points
  c1x := src.width div 2;
  c1y := src.height div 2;
  c2x := dst.width div 2;
  c2y := dst.height div 2;

   // number of steps
  if c2x < c2y then
    n := c2y 
  else 
    n := c2x;
  dec (n,1);

   // starting rotation
  for p2x := 0 to n do begin
    for p2y := 0 to n do begin
      if p2x = 0 then
        alpha:= pi/2 
      else
        alpha := arctan2(p2y,p2x);
      radius := round(sqrt((p2x*p2x)+(p2y*p2y)));
      p1x := round(radius * cos(angle+alpha));
      p1y := round(radius * sin(angle+alpha));
             
      c0 := src.canvas.pixels[c1x+p1x,c1y+p1y];
      c1 := src.canvas.pixels[c1x-p1x,c1y-p1y];
      c2 := src.canvas.pixels[c1x+p1y,c1y-p1x];
      c3 := src.canvas.pixels[c1x-p1y,c1y+p1x];

      dst.canvas.pixels[c2x+p2x,c2y+p2y]:=c0;
      dst.canvas.pixels[c2x-p2x,c2y-p2y]:=c1;
      dst.canvas.pixels[c2x+p2y,c2y-p2x]:=c2;
      dst.canvas.pixels[c2x-p2y,c2y+p2x]:=c3;
    end;
    application.processmessages
  end;
end;



procedure TForm1.bmpRotateClick(Sender: TObject);
Var
  RAngle : Extended;
begin
 RAngle := StrToFloat(Edit1.Text);
 bmp_rotate(Image1.Picture.Bitmap,Image2.Picture.jpeg, RAngle);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -