代码如下:
procedure BitmapRotate(BMP: TBitmap; Angle: Double);
var
  i, j, iRotationAxis, iOriginal, iPrime, iPrimeRotated, jRotationAxis, jOriginal,
    jPrime, jPrimeRotated: Integer;
  RowOriginal: pRGBArray;
  RowRotated: pRGBArray;
  Theta, sinTheta, cosTheta: DOUBLE;
  R, G, B: byte;
  FColor: TColor;
  SavFormat: TPixelFormat;
  BmpOrigin, BmpDest: TBitmap;
begin
  BmpOrigin:=TBitmap.Create;
  BmpDest:=TBitmap.Create;
  BmpOrigin.Assign(BMP);
  
  BmpDest.Width := BmpOrigin.Width;
  BmpDest.Height := BmpOrigin.Height;
  SavFormat := BmpOrigin.PixelFormat;
  BmpOrigin.PixelFormat := pf24bit;
  BmpDest.PixelFormat := BmpOrigin.PixelFormat;
  iRotationAxis := BmpOrigin.Width div 2;
  jRotationAxis := BmpOrigin.Height div 2;
  Theta := Angle * PI / 180;
  sinTheta := SIN(Theta);
  cosTheta := COS(Theta);
  FColor := BmpOrigin.Canvas.Pixels[0, 0];
  B := FColor mod 256;
  G := round((FColor div 256) mod 256);
  R := round((FColor div 256) div 256);  for j := BmpDest.Height - 1 downto 0 do
  begin
    RowRotated := BmpDest.Scanline[j];
    jPrime := 2 * (j - jRotationAxis) + 1;
    for i := BmpDest.Width - 1 downto 0 do
    begin
      iPrime := 2 * (i - iRotationAxis) + 1;
      iPrimeRotated := ROUND(iPrime * CosTheta - jPrime * sinTheta);
      jPrimeRotated := ROUND(iPrime * sinTheta + jPrime * cosTheta);
      iOriginal := (iPrimeRotated - 1) div 2 + iRotationAxis;
      jOriginal := (jPrimeRotated - 1) div 2 + jRotationAxis;
      if (iOriginal >= 0) and (iOriginal <= BmpOrigin.Width - 1) and
        (jOriginal >= 0) and (jOriginal <= BmpOrigin.Height - 1)
        then
      begin
        RowOriginal := BmpOrigin.Scanline[jOriginal];
        RowRotated[i] := RowOriginal[iOriginal]
      end
      else
      begin
        RowRotated[i].rgbtBlue := B;
        RowRotated[i].rgbtGreen := G;
        RowRotated[i].rgbtRed := R ;
      end;
    end;
  end;
  BmpOrigin.PixelFormat := SavFormat;
  BmpDest.PixelFormat := BmpOrigin.PixelFormat;
  image1.Picture.Bitmap.Assign(BmpDest);
  BmpOrigin.Free;
  BmpDest.Free;
end;已经在它赋值了pf24bit了呀。为什么呢???