📄 delphi图象三旋转 (2001年4月2日).txt
字号:
delphi图象三旋转 (2001年4月2日)
网友更新 分类:图形图象 作者:ice_ren 推荐:ice_ren 阅读次数:303
(http://www.codesky.net)
--------------------------------------------------------------------------------
将uv平面上的图象中的所有点相对坐标原点反时针旋转一定角度的变换表达式为:
|cos(a) sin(a) 0|
[x,y,1]=[u,v,1]|-sin(a) cos(a) 0|
|0 0 1|
当a=90度(pi/2)时,上式简化为:
|0 1 0|
[x,y,1]=[u,v,1]|-1 0 0|
|0 0 1|
即:x=-v,y=u
同理,我们也可以计算出旋转180度,270度的情况。
下面是用delphi实现的过程:
1、旋转90度操作
var
x,y:integer;
myimage:timage;
srcrect,dstrect:trect;
begin
myimage:=timage.Create(self);
myimage.Width:=image1.picture.Height;
myimage.height:=image1.picture.Width;
srcrect:=rect(0,0,image1.picture.width,image1.picture.height);
dstrect:=rect(0,0,image1.picture.height,image1.picture.width);
for x:=0 to image1.picture.Width do
begin
for y:=0 to image1.picture.Height do
begin
myimage.Canvas.Pixels[-y+image1.picture.Height,x]:=image1.Canvas.Pixels[x,y];
end;
progressbar1.Position:=x;
end;
myimage.Canvas.CopyRect(dstrect,myimage.Canvas,srcrect);
image1.Picture:=myimage.Picture;
myimage.Free;
end;
2、旋转180度
var
x,y:integer;
myimage:timage;
srcrect,dstrect:trect;
begin
myimage:=timage.Create(self);
myimage.Width:=image1.Picture.Width;
myimage.Height:=image1.Picture.Height;
srcrect:=rect(0,0,image1.picture.width,image1.picture.height);
dstrect:=rect(0,0,image1.picture.width,image1.picture.height);
for x:=0 to image1.Picture.Width do
begin
for y:=0 to image1.Picture.Height do
begin
myimage.Canvas.Pixels[-x+image1.Picture.Width,- y+image1.Picture.Height]:=image1.Canvas.Pixels[x,y];
end;
end;
myimage.Canvas.CopyRect(dstrect,myimage.canvas,srcrect);
image1.Picture:=myimage.Picture;
myimage.Free;
end;
3、旋转270度
var
x,y:integer;
myimage:timage;
srcrect,dstrect:trect;
begin
myimage:=timage.Create(self);
myimage.Width:=image1.Picture.height;
myimage.Height:=image1.Picture.width;
srcrect:=rect(0,0,image1.picture.width,image1.picture.height);
dstrect:=rect(0,0,image1.picture.height,image1.picture.width);
for x:=0 to image1.Picture.Width do
begin
for y:=0 to image1.Picture.Height do
begin
myimage.Canvas.Pixels[y,-x+image1.Picture.width]:=image1.Canvas.Pixels[x,y];
end;
progressbar1.Position:=x;
end;
myimage.Canvas.CopyRect(dstrect,myimage.canvas,srcrect);
image1.Picture:=myimage.Picture;
myimage.Free;
end;
(来自碧草青青 http://rongercao.go.163.com)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -