Contributor: MIKE SHANE

{
Here is some code I use to print a bitmap with StretchDIBits.  The
function accomplishes the same thing as StretchBlt.  The difference is
that it operates with Device Independent Bitmaps (DIBs).  If you want to
use
StretchBlt, you would use it like this:
}

StretchBlt(DestinationRectangle.Handle, DestX, DestY, DestWidth,
              DestH, Bitmap.Handle,SourceX, SourceY, SourceWidth,
              SourceHeight, SRCCOPY);

{ ----- begin code ----- }
procedure TfrmMain.PrintBitmap(Bitmap: TBitmap; X, Y, W, H: Integer);
  var
    Info: PBitmapInfo;
    InfoSize: Integer;
    Image: Pointer;
    ImageSize: Longint;
  begin
    with Bitmap do
    begin
      GetDIBSizes(Handle, InfoSize, ImageSize);
      Info := MemAlloc(InfoSize);
      try
        Image := MemAlloc(ImageSize);
        try
          GetDIB(Handle, Palette, Info^, Image^);
          with Info^.bmiHeader do
            StretchDIBits(Printer.Canvas.Handle, X, Y, W,H,
                                0, 0, biWidth,biHeight,Image,Info^,
                                DIB_RGB_COLORS,SRCCOPY);
        finally
          FreeMem(Image, ImageSize);
        end;
      finally
        FreeMem(Info, InfoSize);
      end;
    end;
  end;
{ ----- end code ----- }