zoukankan      html  css  js  c++  java
  • 使图片任意转动的编程例子

    unit unitImage; 
     
    interface 
     
    uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
      StdCtrls, ExtCtrls, math; 
     
    type 
      TForm1 = class(TForm) 
        Image1: TImage; 
        Image2: TImage; 
        Image3: TImage; 
        Button2: TButton; 
        Button3: TButton; 
        Button4: TButton; 
        Image4: TImage; 
        Button1: TButton; 
        procedure Button2Click(Sender: TObject); 
        procedure Button3Click(Sender: TObject); 
        procedure Button4Click(Sender: TObject); 
      private 
        { Private declarations } 
        procedure bmp_rotate(src, dst: tbitmap; angle: extended); 
      public 
        { Public declarations } 
      end; 
     
    var 
      Form1: TForm1; 
     
    implementation 
     
    {$R *.DFM} 
     
    { TForm1 } 
     
    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 
      //将角度转换为PI值 
      angle := (angle / 180) * pi; 
      // 计算中心点,你可以修改它 
      c1x := src.width div 2; 
      c1y := src.height div 2; 
      c2x := dst.width div 2; 
      c2y := dst.height div 2; 
     
      // 步骤数值number 
      if c2x < c2y then 
        n := c2y 
      else 
        n := c2x; 
      dec(n, 1); 
     
      // 开始旋转 
      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.Button2Click(Sender: TObject); 
    var 
      i, j: integer; 
    begin 
      //确定旋转后位图的大小 
      image2.Picture.Bitmap.Height := image1.picture.width; 
      image2.Picture.Bitmap.Width := image1.picture.height; 
      for i := 0 to image1.Height do 
        for j := 0 to image1.Width do 
          image2.canvas.Pixels[(-i + image1.Height), 
            j] := image1.canvas.Pixels[j, i]; 
    end; 
     
     
    procedure TForm1.Button3Click(Sender: TObject); 
    var 
      i, j: integer; 
    begin 
      //确定旋转后位图的大小 
      image3.Picture.Bitmap.Height := image1.picture.Height; 
      image3.Picture.Bitmap.Width := image1.picture.Width; 
      for i := 0 to image1.Height do 
        for j := 0 to image1.Width do 
          image3.canvas.Pixels[(image1.Width 
            - j), (image1.Height - i)] := image1.canvas.Pixels[j, i]; 
    end; 
     
     
    procedure TForm1.Button4Click(Sender: TObject); 
    var 
      i, j: integer; 
    begin 
      //确定旋转后位图的大小 
      image4.Picture.Bitmap.Height := image1.picture.Width; 
      image4.Picture.Bitmap.Width := image1.picture.Height; 
      for i := 0 to image1.Height do 
        for j := 0 to image1.Width do 
          image4.canvas.Pixels[i, (image1.Width-j)] := image1.canvas.Pixels[j, i]; 
    end; 
     
     
     
    end. 
     
  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/yzryc/p/6379067.html
Copyright © 2011-2022 走看看