Nachtrag der Vollständigkeit halber
Delphi-Quellcode:
function GDIPRotateFlipBitmap(ABitmap: tBitmap; Mode: RotateFlipType): Boolean;
var
BM: tBitmap;
GR: tGPGraphics;
AGPBitmap: tGPBitmap;
AStatus: Status;
W: Integer;
begin
if Mode = RotateNoneFlipNone then begin
Result := True;
Exit;
end;
BM := tBitmap.Create;
BM.Assign(ABitmap);
AGPBitmap := tGPBitmap.Create(BM.Handle, 0);
AGPBitmap.RotateFlip(Mode);
if (ABitmap.Width <> ABitmap.Height) and
> (Mode in [Rotate90FlipNone, Rotate270FlipNone,
> Rotate90FlipX, Rotate270FlipX,
> Rotate90FlipY, Rotate270FlipY,
> Rotate90FlipXY, Rotate270FlipXY]) then begin
W := ABitmap.Width;
ABitmap.Width := ABitmap.Height;
ABitmap.Height := W;
end;
GR := tGPGraphics.Create(ABitmap.Canvas.Handle);
GR.DrawImage(AGPBitmap, 0, 0);
AStatus := GR.GetLastStatus;
Result := (AStatus = OK);
AGPBitmap.Free;
BM.Free;
GR.Free;
end;
So funktioniert es zwar auch unter 24 Bit, das ist dann alles aber sehr langsam. Mich irritiert halt, dass die Drehung bei 32-Bit auch in Deiner ursprünglichen Fassung funktioniert.
Mit Deiner letzten Ergänzung dauert es ca. 9,3 Sekunden, um die große Welt-Grafik zu drehen (24-Bit Fassung), die 32-Bit-Fassung geht allerdings genau so schnell wie Deine alte Fassung...