---- 把一个点绕原点旋转α角度后,新的坐标位置与原坐标位置的关系是: X=xcosα-ysinα Y= xsinα+ycosα 例如要把位图顺时针旋转90度,坐标变换公式为:X=-y Y=x示例代码如下:记得uses jpegprocedure TForm1.BitBtn1Click(Sender: TObject); var MyJpeg: TJpegImage; bmp,bmp2: Tbitmap; i,j : integer; begin //create bmp:=tbitmap.Create; MyJpeg:= TJpegImage.Create; bmp2 := TBitmap.Create; myjpeg.LoadFromFile('d:\temp\test.jpg'); bmp.Assign(myjpeg);//确定旋转后位图的大小 bmp2.Height:=bmp.width; bmp2.Width:=bmp.height; //转换 for i:=0 to bmp.Height do for j:=0 to bmp.Width do bmp2.canvas.Pixels[(-i+ bmp.Height),j]:=bmp.canvas.Pixels[j,i]; myjpeg.Assign(bmp2); //将bmp再专为jpg MyJpeg.SaveToFile('d:\temp\wudi.jpg'); // Save the JPEG to Disk //free bmp.Free; bmp2.Free; myjpeg.Free; end;
不过速度有点慢,要改进一下
Y= xsinα+ycosα
例如要把位图顺时针旋转90度,坐标变换公式为:X=-y Y=x示例代码如下:记得uses jpegprocedure TForm1.BitBtn1Click(Sender: TObject);
var
MyJpeg: TJpegImage;
bmp,bmp2: Tbitmap;
i,j : integer;
begin
//create
bmp:=tbitmap.Create;
MyJpeg:= TJpegImage.Create;
bmp2 := TBitmap.Create; myjpeg.LoadFromFile('d:\temp\test.jpg');
bmp.Assign(myjpeg);//确定旋转后位图的大小
bmp2.Height:=bmp.width;
bmp2.Width:=bmp.height;
//转换
for i:=0 to bmp.Height do
for j:=0 to bmp.Width do
bmp2.canvas.Pixels[(-i+ bmp.Height),j]:=bmp.canvas.Pixels[j,i];
myjpeg.Assign(bmp2); //将bmp再专为jpg
MyJpeg.SaveToFile('d:\temp\wudi.jpg'); // Save the JPEG to Disk
//free
bmp.Free;
bmp2.Free;
myjpeg.Free;
end;