unit ads_GraphicFlip; {
}
interface
Uses Windows,Graphics;
Function BitmapFlip(
  Const Vertical   : Boolean;
  Const Horizontal : Boolean;
  var   BitmapIn   : TBitmap;
  out   BitmapOut  : TBitmap):  Boolean;
implementation
Type
  TColorData = Array[0..128000] Of TRGBTriple;
  pColorData = ^TColorData;
Function BitmapFlip(
  Const Vertical   : Boolean;
  Const Horizontal : Boolean;
  var   BitmapIn   : TBitmap;
  out   BitmapOut  : TBitmap):  Boolean;
Var
  DataIn    : pColorData;
  DataOut   : pColorData;
  inRow     : Integer;
  inCol     : Integer;
Begin
  Result := False;
  Try
    If BitmapIn.PixelFormat <> pf24bit Then Exit;
    With BitmapOut Do
    Begin
      Width       := BitmapIn.Width;
      Height      := BitmapIn.Height;
      PixelFormat := BitmapIn.PixelFormat;
    End;
    For inRow := 0 To BitmapIn.Height - 1 Do
    Begin
      DataIn := BitmapIn.Scanline[inRow];
      If Vertical Then
      Begin
        DataOut := BitmapOut.ScanLine[BitmapIn.Height - 1 - inRow];
      End
      Else
      Begin
        DataOut := BitmapOut.ScanLine[inRow];
      End;
      If Horizontal Then
      Begin
        For inCol := 0 To BitmapIn.Width-1 Do DataOut[inCol] := DataIn[BitmapIn.Width-1-inCol];
      End
      Else
      Begin
        For inCol := 0 To BitmapIn.Width-1 Do DataOut[inCol] := DataIn[inCol];
      End;
    End;
    Result := True;
  Except
  End;
End;
End.
                                                                                                          //