La Web del Programador: Comunidad de Programadores
 
    Pregunta:  12162 - IMPRIMIR UN BITMAP
Autor:  Diego Romero
Ante todo debo aclarar que soy nuevo en Delphi, tengo la versión enterprise 5.0.
Pongo un bitmap en un Timage de un form junto a otros controles y quiero imprimir solo el bitmap, he hecho algo pero en la impresora me sale la imagen mas chica que una estampilla, ¿cómo hago para que en la impresora me salga de un tamaño mas o menos acorde con lo que se ve en pantalla?

  Respuesta:  Luis Fernandez
Impresión directa.Te puede salir la imagen como una pulga.

procedure TForm1.Print1Click(Sender: TObject);
begin
Printer.BeginDoc;
try
Printer.Canvas.Draw(0, 0, Image1.Picture.Graphic);
finally
Printer.EndDoc;
end;
end;

Con este código ajustas la escala de la imagen cargada en un objeto TImage de Delphi y mas o menos se imprime a escala real.Antes tienes que cargar la imagen en el TImage.

procedure TForm1.Button1Click(Sender: TObject);
var
ScaleX, ScaleY: Integer;
R: TRect;
begin
Printer.BeginDoc;
with Printer do
try
ScaleX :=
GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY :=
GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(0, 0, Image1.Picture.Width * ScaleX,
Image1.Picture.Height * ScaleY);
Canvas.StretchDraw(R, Image1.Picture.Graphic);
finally
EndDoc;
end;
end;

Este hace los mismo que el anterior pero NO CONSUME RECURSOS DEL SISTEMA pues empleas un objeto TPicture que creas en el momento y destruyes tras la impresión.

procedure TForm1.Button1Click(Sender: TObject);
var
P: TPicture;
ScaleX, ScaleY: Integer;
R: TRect;
begin
P := TPicture.Create;
try

P.LoadFromFile('C:\MiDirectorio\Ejemplo.bmp');

Printer.BeginDoc;
with Printer do
try
ScaleX :=
GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY :=
GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(0, 0, P.Width * ScaleX, P.Height * ScaleY);
Canvas.StretchDraw(R, P.Graphic);
finally
Printer.EndDoc;
end;
finally
P.Free;
end;
end;