呵呵,各位帮我看看这段旋转图片的程序(50分)

  • 主题发起人 主题发起人 zyhml
  • 开始时间 开始时间
Z

zyhml

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tf_main.rotation(var bmp: tbitmap);//旋转90度
var newbmp:tbitmap;
i,j,k,l:integer;
tc:tcolor;
begin
newbmp:=tbitmap.Create;
i:=bmp.Width;
j:=bmp.Height;
newbmp.Width:=j;
newbmp.Height:=i;
for k:= 0 to i-1 do
for l:=0 to j-1 do
begin
tc:=bmp.Canvas.Pixels[k,l];
newbmp.Canvas.Pixels[i-l-1,k]:=tc;
end;
bmp.Assign(newbmp);
newbmp.free;
end;
正方形的没有问题,矩形的话每变换一次减少一个长宽差,若长宽差大于2倍的话,就
变成空白的
 
改写两句 :

tc:=bmp.Canvas.Pixels[k,l];
newbmp.Canvas.Pixels[j-l,i-k]:=tc;
 
我改成newbmp.Canvas.Pixels[l,i-k-1]:=tc;就没问题了
问题为什么?
 
其实关于旋转90度,你这种方法是象素操作,太慢了;
可以看看我在这里的解答:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=977003
 
后退
顶部