Необходимо вывести картинку 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'е ничего не рисует. Написал багрепорт.