如何旋转图片的问题?急!!高分相送!! 如何实现在鼠标的带动下,以图片的中心为圆心任意角度旋转图片?或者是如何实现在鼠标的带动下以某点为圆心,按照某一半径任意角度旋转shape控件?解决任何一个问题均送分!!!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 旋转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. TO: myling(阿德) 这种方法应该会很慢!如果用鼠标进行拖拉旋转,小图片就好,大的话!!! 如果不介意第三方控件1stclass里的fcImager我可找了半小时。你不用它也可以看他的算法啊:-) 他来自TGraphicControl,你可以抽取他的算法,形成你单独的单元,下次就不用安装这个控件了 响应鼠标的移动事件,在事件处理函数中得到鼠标的位置,计算角度,然后旋转Canvas 请教:在rave报表中做‘合计’时增加一个band1,添加calctext,calctype选的是ctsum,但是运行时calctext下什么都没有,怎么回事? 怎么判断父类接口是否是实现了子类接口 怎样将每一个子窗口都能够独立在任务栏中显示? 关于中文空格? 小數點問題 【各位大侠帮帮我,帮忙介绍一本好书】,学习中,散分!!!!!! 报表问题?熟悉fastreport报表控件或者用过Delphi7新增的 Rave Report报表控件的请进 难道网上没有谁会在delphi中使用spread控件吗 Delphi字符串问题 TM-U300A 打印机问题 加急 选择服务器与数据库 求助!!
但是旋转图片就简单了,但是也不能旋转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.
这种方法应该会很慢!如果用鼠标进行拖拉旋转,小图片就好,大的话!!!
我可找了半小时。你不用它也可以看他的算法啊:-)