Technology Learning

导航

图片旋转

procedure TForm16.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
  angle:=(angle/180)*pi;
  c1x:=src.Width div 2;
  c1y:=src.Height div 2;
  c2x:=dst.Width div 2;
  c2y:=dst.Height div 2;

  if c2x<c2y then
   n:=c2y
   else
   n:=c2x;

   dec(n);

   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;
procedure TForm16.Button1Click(Sender: TObject);
var
  RAngle:Extended;
begin
  RAngle:=strToFloat(Edit1.Text);
  bmp_rotate(image1.Picture.Bitmap,image2.Picture.Bitmap,Rangle);
end;

posted on 2010-04-01 23:49  浔阳渔夫  阅读(241)  评论(0编辑  收藏  举报