Печать изображений из TImage

Очень часто при работе с графикой возникает необходимость в выводе изображения на бумагу. Сделать это не так просто, поскольку штатной функции для печати изображений в LCL, увы, нет (хотя есть её набросок, что позволяет надеяться на появление таковой в будущем).
Однако, если воспользоваться глобальным объектом Printer, можно распечатать любое изображение без лишних хлопот:

uses printers, PrintersDlgs, jwawingdi;

procedure TForm1.MyPrintBitmap(xImage: TImage);
var
  printerDialog : TPrintDialog;
  myPrinter   : TPrinter;
  ImageRect: TRect;
  ScaleX, ScaleY: integer;
begin
  // Создание диалога для выбора принтера
  printerDialog:=TPrintDialog.Create(Form1);

  // Вызываем диалог выбора принтера
  if printerDialog.Execute then
  begin
    // Получаем доступ к глобальному объекту Printer
    myPrinter := Printer;
    with myPrinter do
    begin
      // Коэффициенты масштабирования изображения
      ScaleX:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsX) div PixelsPerInch;
      ScaleY:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsY) div PixelsPerInch;
      // Начало печати
      BeginDoc;
      // Отрисовка нашего изображения на виртуальной канве принтера
      ImageRect:=Rect(0, 0, xImage.Picture.Width * ScaleX, xImage.Picture.Height * ScaleY);
      Canvas.StretchDraw(ImageRect, xImage.Picture.Bitmap);
      // Конец печати
      EndDoc;
    end;
  end;
end;

Вызывается эта функция одной простой строчкой:

procedure TForm1.Button2Click(Sender: TObject);
begin
  // В качестве параметра передаём любой компонент TImage
  MyPrintBitmap(Image1);
end; 

Как обычно вы можете скачать пример целиком.

6 комментариев

  1. От Юрий Кузнецов

    Ответить

    • От Lazarus.Su

      Ответить

  2. От vanse07

    Ответить

  3. От vanse07

    Ответить

    • От Lazarus.Su

      Ответить

  4. От Сергей

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *