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

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

[code lang=»delphi»]
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;
[/code]

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

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

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

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

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

    Ответить

    • От Lazarus.Su

      Ответить

  2. От vanse07

    Ответить

  3. От vanse07

    Ответить

    • От Lazarus.Su

      Ответить

  4. От Сергей

    Ответить

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

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