Показать сообщение отдельно
  #1  
Старый 04.03.2025, 00:31
anbsoft anbsoft вне форума
Прохожий
 
Регистрация: 24.08.2022
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Печать изображения на чековом принтере

При печати изображения на термопринтере (чековом) изображение искажается.
Написал тестовый код:
Код:
 var B:TBitmap;
Procedure Test(C:TCanvas;X:Integer);
var n,f,Y:Integer;
begin
  Y:=0;
  for n:=1 to 10 do begin
    for f:=1 to n do begin
      C.MoveTo(X,Y);
      C.LineTo(100+X,Y);
      Inc(Y);
    end;
    Y:=Y+10;
  end;
end;
begin
  B:=TBitmap.Create;
  B.Width:=101;
  B.Height:=201;
  Test(B.Canvas,0);
  Printer.BeginDoc;
  Printer.Canvas.Draw(0,0,B);
  Test(Printer.Canvas,105);
  Printer.EndDoc;
  B.Free;
 end;
Админ: Пользуемся тегами при оформлении кода!

При печати на лазерном принтере правая и левая часть выглядят одинаково.
На термопринтере напечатанное изображение выглядит более бледно.
Пробовал разные варианты: StretchDraw, StretchDIBits, PixelFormat и прочее, результат не меняется.
Рядом на фото круги B.Canvas.Ellipse(0,0,100,100);
и Printer.Canvas.Ellipse(20,20,80,80);
Хорошо видно разницу в толщине линий, хотя они должны быть одинаковыми.
Складывается впечатление, что при построении изображения прямо на канвасе принтера, драйвер принтера использует другие алгоритмы отрисовки.
https://delphisources.ru/forum/attachment.php?attachmentid=5502&stc=1&d=174103741 8
Изображения
Тип файла: jpg img046.jpg (83.3 Кбайт, 9 просмотров)
Ответить с цитированием