[pascal]procedure Rotate90Deg(BmpIn, BmpOut: TBitmap);
Var
InX, InY: integer;
Output, Input: pRGBTriple;
OutNext, OutBack, InPlus: integer;
begin
BmpOut.Width:= BmpIn.Height;
BmpOut.Height:= BmpIn.Width;

Output:= BmpOut.ScanLine[0];
OutNext:= Integer(BmpOut.Scanline[1]) - Integer(Output);
OutBack:= BmpIn.Width * OutNext + SizeOf(TRGBTriple);
inc(Output, BmpOut.Width-1);

Input:= BmpIn.ScanLine[0];
InPlus:= Integer(BmpIn.Scanline[1]) - Integer(Input) - BmpIn.Width * SizeOf(TRGBTriple);

for InY:= 0 to BmpIn.Height-1 do
begin
for InX:= 0 to BmpIn.Width-1 do
begin
Output^ := Input^;
Inc(Integer(Output), OutNext);
Inc(Input);
end;
Dec(Integer(Output), OutBack);
Inc(Integer(Input), InPlus);
end;
end;[/pascal]

Do this three times and you'll have all youre 90 180 270 degree rotated bitmaps.