Глюки при отработке StretchDraw

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

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

Глюки при отработке StretchDraw

Сообщение de-signer » 20.07.2015 14:21:26

Привет всем.

Необходимо вывести картинку TBitmap на печать. Задача тривиальная Printer.Canvas.Draw(0, 0, bitmap). Реализую пробник:
Код: Выделить всё
    img := TBitmap.Create;
    prn := Printer;
    prn.BeginDoc;
    sz := 256;
    with img do begin
      HandleType := bmDIB;
      PixelFormat := pf32bit;
      Width := sz+1;
      height := sz;
      with Canvas do begin
        Brush.Style := bsSolid;
        Brush.Color := clWhite;
        FillRect(0, 0, sz, sz);
        Pen.Color := clBlack;
        Pen.Width := 2;
        MoveTo(0, 0);
        LineTo(sz, sz);
      end;
    end;
  prn.Canvas.Draw(0, 0, img)
  prn.EndDoc;

Под виндой всё хорошо. Под линуксом на цветной лазерник уходит нормально, а на монохромнике какая-то лажа
Изображение
Раз под виндой работает и на линуксе цветной тоже печатает значит драйвера? Ан не тут-то было! Вот это:
Код: Выделить всё
    q := TCairoPrinterCanvas(prn.Canvas);
    q.MoveTo(0, 0);
    q.LineTo(sz, sz);

Работает! И текст выводится, а вот ни Draw ни StretchDraw не отрисовывают картинку корректно. Причём на тестовой страница принтера лого Linux Mint явная картинка и выводится корректно.
Кто-нибудь сталкивался? Куда дальше копать мыслей уже нет.
P.S.: Lazarus 1.4.0 FPC 2.6.4

Добавлено спустя 1 минуту 14 секунд:
Картинка не прицепилась. Вот тут картинка

Добавлено спустя 8 минут 21 секунду:
Ха. Прикол. При sz=256
Код: Выделить всё
Image1.Picture.Bitmap.Canvas.StretchDraw(img.Canvas.ClipRect, img)
Не выводит на канву картинки _вообще ничего_ =)

Добавлено спустя 3 минуты 13 секунд:
... и при 512. =( Вобщем если ширина картинки кратна степени двойки и PixelFormat=pf32bit Draw даже на Bitmap'е ничего не рисует. Написал багрепорт.
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Глюки при отработке StretchDraw

Сообщение java73 » 20.07.2015 19:33:54

А потом они мне еще будут говорить, что я один с линуксоидными сборками мучаюсь.....
Сочувствую.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Глюки при отработке StretchDraw

Сообщение zub » 20.07.2015 20:51:08

>>Кто-нибудь сталкивался? Куда дальше копать мыслей уже нет.
На багтрекер?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Глюки при отработке StretchDraw

Сообщение Alex2013 » 21.07.2015 01:41:55

1 А вообще принтер из под линя картинки печатает ?
2 Может проще записать витмап в файл и распечатать чем-то консольным ?
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Re: Глюки при отработке StretchDraw

Сообщение de-signer » 21.07.2015 12:12:59

zub писал(а):На багтрекер?

Отправил.
Alex2013 писал(а):А вообще принтер из под линя картинки печатает ?

Тестовая страница - на ура.
java73 писал(а):Сочувствую.

Не стоит =)
Вопрос решил через трубу: взял widgetset qt.
Теперь другой вопрос: Я приложение под виндой запустить не могу. Требует mingw10.dll. Скачал последний mingw, а там этой библиотеки нет!
Сейчас буду копать версию qt, которая под линухом, дабы именно её подсунуть винде.
Подскажите, mingw для винды - это ясно, а что такое суть mingw для линукса? Это его штатные либы?

Добавлено спустя 2 часа 56 минут 1 секунду:
Нашёл нужный qt и mingw. Всё рисуется на пять с плюсом.
Следующий =) глюк. Разрешение принтера 600х600 dpi. Linux видит это, очём сообщает в диалоге настройки печати, а Printer.XDPI сообщает, что разрешение 1200x1200. Что блин за нафиг-то? Под виндой всё люкс.
Причём после печати (соответственно) получается изображение в два раза меньше и с мелкими точками на месте белого цвета (такое часто случается при криворуком сжатии картинки). Почитал, что 1200 - это разрешение Postscript, а дальше он подгоняет под канву на которой рисует, а мне вот это нафиг не сдалось. Как задать разрешение для принтера вручную?

Добавлено спустя 2 часа 41 минуту 24 секунды:
Нашёл в Qt: QtDefaultPrinter.Resolution := 600; Вот только что получится если нужный принтер будет не Default ?
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 231

Рейтинг@Mail.ru