unit ads_GraphicFlip; {ads_GraphicFlip
Copyright(c)2001 Advanced Delphi Systems (Richard Maley,12613 Maidens Bower Drive, Potomac, MD 20854 USA, phone 301-840-1554, maley@advdelphisys.com, http://www.advdelphisys.com/)

The code herein can be used or modified by anyone. Please retain references to Dick Maley at Advanced Delphi Systems. If you make improvements to the code please send your improvements to maley@advdelphisys.com so that the entire Delphi community can benefit. All comments are welcome.

}

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.
                                                                                                          //