如何实现在鼠标的带动下,以图片的中心为圆心任意角度旋转图片?
或者是如何实现在鼠标的带动下以某点为圆心,按照某一半径任意角度旋转shape控件?
解决任何一个问题均送分!!!谢谢!

解决方案 »

  1.   

    旋转shape控件可能比较难
    但是旋转图片就简单了,但是也不能旋转image控件,这时需要将image的大小设的大一点,起码能让图片转360度不越界!
    转一贴吧,但是这个程序的效果特别差!需要自己改了
    使图片旋转 
    CoDelphi.com  摘 要:如何使图片旋转 
     关键字:Canvas 自由旋转 旋转 
     类 别:图形 
    --------------------------------------------------------------------------------
    在窗体中添加一个button和一个image,选择一幅大约100x100的bitmap。unit drawunit; interface uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls; type
      TForm1 = class(TForm)
        Image1: TImage;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        rotateimage:timage;
      end; var
      Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); 
    const
      rotation = 2/3*pi; 
    var
      x,y : integer;
      newx,newy : integer;
      radius,a : real; 
    begin
      form1.WindowState:=wsMaximized;
      image1.Visible:=false;
      button1.Visible:=false;
      rotateimage:=timage.Create(self);
      rotateimage.parent:=self;
      rotateimage.Left:=0;
      rotateimage.Top:=0;
      rotateimage.width:=740;
      rotateimage.Height:=540;
      for x:=1 to image1.Picture.Width do
      begin
        for y:=1 to image1.Height do
        begin
          radius:=Sqrt(Sqr(X)+Sqr(Y));
          a:=Arctan(Y/X);
          newx:=round(Radius*Cos(A+Rotation)+300);
          newy:=round(Radius*Sin(A+Rotation)+300);
          rotateimage.Canvas.Pixels[newx,newy]:=image1.Canvas.Pixels[x,y];
        end;
      end; 
    end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
    begin
      rotateimage.free; 
    end; end.
      

  2.   

    TO: myling(阿德) 
    这种方法应该会很慢!如果用鼠标进行拖拉旋转,小图片就好,大的话!!!
      

  3.   

    如果不介意第三方控件1stclass里的fcImager
    我可找了半小时。你不用它也可以看他的算法啊:-)
      

  4.   

    他来自TGraphicControl,你可以抽取他的算法,形成你单独的单元,下次就不用安装这个控件了
      

  5.   

    响应鼠标的移动事件,在事件处理函数中得到鼠标的位置,计算角度,然后旋转Canvas