BMP图片旋转问题!(200)

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

zkktom

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有关于图片旋转的代码? 发段给我。网络上百度很容易能查到的不要。 我要速度快点的。
 
简单些 可以提供modem接受传真的代码吗?DreamFax 的我有了
 
没有人回答吗?
 
不懂,帮顶。
 
用GDI+么好了。
 
用解析几何
 
32位的垂直旋转:procedure RotateBmp(ABmp: TBitmap);var I, J: integer;
p, p1: PByteArray;
Bmp1: TBitmap;
begin
Bmp1 := TBitmap.Create;
Bmp1.Assign(ABmp);
Bmp1.Canvas.FillRect(Bmp1.Canvas.ClipRect);
for J := 0 to Bmp1.Height - 1do
begin
p := ABmp.ScanLine[J];
P1 := Bmp1.ScanLine[ABmp.Height - 1 - J];
for I := 0 to ABmp.Width - 1do
begin
p1[4 * I + 3] := p[4 * I + 3];
p1[4 * I + 2] := p[4 * I + 2];
p1[4 * I + 1] := p[4 * I + 1];
p1[4 * I] := p[4 * I];
end;
end;
ABmp.Canvas.Brush.Color := clWhite;
ABmp.Canvas.FillRect(ABmp.Canvas.ClipRect);
BitBlt(ABmp.Canvas.Handle, 0, 0, ABmp.Width, ABmp.Height, Bmp1.Canvas.Handle, 0, 0, SRCCOPY);
Bmp1.Free;
end;
 
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;
 
就是旋转的速度好慢
 
用happycyp的SCANLINE就快
 
顶。。。。。。。。。。。。。。。。。。
 
好像是还没有回答过问题呢!嘿嘿...用GDI+,里面有个旋转的函数,还比较快。RotateTransform()
 
delphi6 下的 旋转图片的函数 有控件吗?
 
算了 我现在换了个做法,我先专成传真页 旋转后转成图片。
 
用GDI+, 一个DrawImage函数就搞定了
 
多人接受答案了。
 
后退
顶部