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

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

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

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

Сообщение Demi » 19.02.2013 10:54:54

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

Код: Выделить всё
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-хбитные?
Demi
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.02.2013 10:43:41

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

Сообщение Linus » 01.06.2013 20:06:41

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

Не подскажите , где вы вязли PrintersDlgs??
Linus
новенький
 
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

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

Сообщение Лекс Айрин » 02.06.2013 17:35:52

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

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

Сообщение trengtor » 02.06.2013 19:01:42

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

Это в каком цветовом пространстве они с цветом 32 бита? В CMYK? Если так – то их корректное преобразование в sRGB (24 бита) будет не совсем тривиальной задачей. Проще, видимо, будет подумать о преобразовании с потерей цвета (в монохром) в те же 24 или 8 цветов.
Аватара пользователя
trengtor
новенький
 
Сообщения: 77
Зарегистрирован: 03.05.2013 08:57:43
Откуда: Москва

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

Сообщение Linus » 04.06.2013 14:53:08

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


Их там не было... Уже разобрался с этим, пошарив по исходникам лазаря...
p.s. Проблема решилась ручной компиляцией/установкой пакета printer4lazarus.
Linus
новенький
 
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

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

Сообщение Лекс Айрин » 04.06.2013 15:15:40

Linus, это странно, вообще-то у меня в трех системах он есть.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 255

Рейтинг@Mail.ru