uses
lcltype;
procedure Rotate90(Bitmap: TBitmap);
type
TRGBArray = array[0..0] of TRGBTriple;
pRGBArray = ^TRGBArray;
var
oldRows, oldColumns: integer;
rowIn, rowOut: pRGBArray;
tmpBitmap: TBitmap;
begin
tmpBitmap := TBitmap.Create;
tmpBitmap.Width := Bitmap.Height;
tmpBitmap.Height := Bitmap.Width;
tmpBitmap.PixelFormat := Bitmap.PixelFormat;
for oldColumns := 0 to Bitmap.Width - 1 do
begin
rowOut := tmpBitmap.ScanLine[oldColumns];
for oldRows := 0 to Bitmap.Height - 1 do
begin
rowIn := Bitmap.ScanLine[oldRows];
rowOut[Bitmap.Height - oldRows - 1] := rowIn[oldColumns];
end;
end;
Bitmap.assign(tmpBitmap);
tmpBitmap.free;
end;
procedure Rotate180(Bitmap: TBitmap);
type
TRGBArray = array[0..0] of TRGBTriple;
pRGBArray = ^TRGBArray;
var
countRows, countColumns: integer;
rowIn,rowOut: pRGBArray;
tmpBitmap: TBitmap;
begin
tmpBitmap := TBitmap.Create;
tmpBitmap.Width := Bitmap.Width;
tmpBitmap.Height := Bitmap.Height;
tmpBitmap.PixelFormat := Bitmap.PixelFormat;
for countRows := 0 to Bitmap.Height - 1 do
begin
rowIn := Bitmap.ScanLine[countRows];
rowOut := tmpBitmap.ScanLine[Bitmap.Height - countRows - 1];
for countColumns := 0 to Bitmap.Width - 1 do
rowOut[Bitmap.Width - countColumns - 1] := rowIn[countColumns];
end;
Bitmap.assign(tmpBitmap);
tmpBitmap.free;
end;
procedure Rotate270(Bitmap: TBitmap);
type
TRGBArray = array[0..0] of TRGBTriple;
pRGBArray = ^TRGBArray;
var
oldRows, oldColumns: integer;
rowIn, rowOut: pRGBArray;
tmpBitmap: TBitmap;
begin
tmpBitmap := TBitmap.Create;
tmpBitmap.Width := Bitmap.Height;
tmpBitmap.Height := Bitmap.Width;
tmpBitmap.PixelFormat := Bitmap.PixelFormat;
for oldColumns := 0 to Bitmap.Width - 1 do
begin
rowOut := tmpBitmap.ScanLine[oldColumns];
for oldRows := 0 to Bitmap.Height - 1 do
begin
rowIn := Bitmap.ScanLine[oldRows];
rowOut[oldRows] := rowIn[Bitmap.Width - oldColumns - 1];
end;
end;
Bitmap.assign(tmpBitmap);
tmpBitmap.free;
end;