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

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Demi
незнакомец
Сообщения: 5
Зарегистрирован: 19.02.2013 10:43:41
Контактная информация:

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

Сообщение Demi »

Добрый день!
Кто сталкивался с подобным- помогите. Пробую распечатать изображение на цветном принтере - отлично распечатывается, пробую на лазерном - пустой лист. Перепробовал несколько принтеров - результат такой же. Попутно нашёл проблему: если в названии принтера есть русские буквы - вылетает исключение:

Код: Выделить всё

raise EPrinter.Create('Unable to set default printer!'); 


Код для печати:

Код: Выделить всё

procedure MyPrintBitmap(Bitmap: TBitmap);
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 XDPI;
      ScaleY:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsY) div YDPI;
      // Начало печати
      BeginDoc;
      // Отрисовка нашего изображения на виртуальной канве принтера
      ImageRect:=Rect(0, 0, Bitmap.Width * ScaleX, Bitmap.Height * ScaleY);
      Canvas.StretchDraw(ImageRect,Bitmap);
      // Конец печати
      EndDoc;
    end;
  end;
end;


UPD: Поправочка, принтер печатает, я добавил текст - текст вывелся, а картинка нет. Похоже проблема в Canvas.StretchDraw(ImageRect,Bitmap);

UPD2: Разобрался, StretchDraw не может нарисовать 32-х битные изображения. Новый вопрос - как преобразовать 32-хбитные картинки в 24-хбитные?
Linus
новенький
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

Сообщение Linus »

Demi писал(а):printerDialog : TPrintDialog;

Не подскажите , где вы вязли PrintersDlgs??
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Linus, с панели компонент, вкладка диалоги...
Аватара пользователя
trengtor
новенький
Сообщения: 77
Зарегистрирован: 03.05.2013 08:57:43
Откуда: Москва

Сообщение trengtor »

Demi писал(а):StretchDraw не может нарисовать 32-х битные изображения

Это в каком цветовом пространстве они с цветом 32 бита? В CMYK? Если так – то их корректное преобразование в sRGB (24 бита) будет не совсем тривиальной задачей. Проще, видимо, будет подумать о преобразовании с потерей цвета (в монохром) в те же 24 или 8 цветов.
Linus
новенький
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

Сообщение Linus »

Лекс Айрин писал(а):Linus, с панели компонент, вкладка диалоги...


Их там не было... Уже разобрался с этим, пошарив по исходникам лазаря...
p.s. Проблема решилась ручной компиляцией/установкой пакета printer4lazarus.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Linus, это странно, вообще-то у меня в трех системах он есть.
Ответить