Изображение (PCX) для принтера EPL2 Zebra - PullRequest
1 голос
/ 15 июня 2010

У меня проблемы с производством и загрузкой графики на принтер EPL2.

Устал буквально от любых доступных программ и тралял в Интернете, я в растерянности.

У меня есть1-битный файл, который я пытаюсь загрузить с помощью следующего скрипта ..

setppi.txt

GK"NAMEPCX"
GK"NAMEPCX" 
GM"NAMEPCX"3042

и затем загрузить с помощью

copy setppi.txt+ppirmt.pcx lpt1/b

Кто-нибудь с опытом получил какие-нибудь советы, прежде чем я оторву остатки моих волос?Я почти уверен, что эта проблема связана с созданием pcx, но перепробовав все варианты, я не уверен в своем следующем шаге.

Ответы [ 4 ]

3 голосов
/ 21 февраля 2011

Вот способ, которым я нашел правильное создание PCX:

В gimp сохраните файл как 1-битный (черно-белый) BMP.Не выбирайте PCX, потому что сохраненный формат не является 1-битным PCX, как того требует принтер!

Используйте программу преобразования imagemagick для преобразования BMP в PCX.

Другая проблема, с которой я столкнулсяпосле того, как я понял, что графика все еще повреждена, это была проблема с кодовой страницей, так что следите за этим.

2 голосов
/ 17 мая 2013

Вы не упоминаете, какой язык программирования вы используете.

Если это C # (или .NET в целом), то вот сообщение в блоге о печати изображений с EPL:
Использование команды EPL2 GW для отправки изображения на термопринтер Zebra

И еще одно сообщение в блоге от того же парня , с которого я начал печатать EPL на принтерах Zebra с C # .

1 голос
/ 01 сентября 2013

Существует два способа вывода графики PCX с использованием языка EPL2.Первый - тот, который вы предложили:

GK"namepcx"
GK"namepcx"
GM"namepcx",3042
..... and here follows monochrome PCX data ...
..... with 128-bit header and following pixel data 1 bit-per pixel..

позже вы сможете записать это сохраненное "namepcx" в буфер изображения принтера через GM, однако я потратил два дня, пытаясь сохранить PCX, но он никогда не будет храниться правильно.Поэтому я просто использовал команду GW для записи данных пикселей непосредственно в буфер изображений принтеров.Избегать «хранения во флэш-памяти».Также изначально это «флэш» хранилище через GM предназначалось для хранения некоторого изображения (например, логотипа), которое повторялось бы на всех этикетках.Таким образом, вы можете сохранить его один раз, а затем распечатать 10 000 этикеток с таким же логотипом.Однако, если печатать из Java, обычно вы печатаете много разных изображений на разных этикетках.Таким образом, если вы сохраняете для флэш-памяти новое изображение для каждой этикетки, то вы очень быстро «изнашиваете» флэш-память.(Например, в руководстве к принтеру LP 2824 говорится, что флэш-память имеет только 100 000 циклов записи).

Таким образом, может показаться, что использование GW для записи imag непосредственно в буфер изображения вместо трехэтапного GK GM GG может быть лучшим решением.

0 голосов
/ 15 мая 2016

Отказ от ответственности: я сейчас пишу SVG-to-EPL-транспортер, который можно найти здесь

Недавно я столкнулся с той же проблемой и решил ее, отправив на принтер команду GW.

Основное отличие от GK - GK - GM - GG заключается в том, что вы не отправляете PCX-заголовок вместе, а скорее необработанные двоичные данные (afaik без сжатия LRE).

Я использовал следующий (неоптимизированный / наивный) код C #, который интенсивно использует сдвиг битов. Алгоритм может быть реализован на любом языке и прост:

[NotNull]
public IEnumerable<byte> GetRawBinaryData([NotNull] Bitmap bitmap,
                                          int octetts)
{
  var height = bitmap.Height;
  var width = bitmap.Width;

  for (var y = 0;
        y < height;
        y++)
  {
    for (var octett = 0;
          octett < octetts;
          octett++)
    {
      var value = (int) byte.MaxValue;

      for (var i = 0;
            i < 8;
            i++)
      {
        var x = octett * 8 + i;
        var bitIndex = 7 - i;
        if (x < width)
        {
          var color = bitmap.GetPixel(x,
                                      y);
          if (color.A > 0x32
              || color.R > 0x96 && color.G > 0x96 && color.B > 0x96)
          {
            value &= ~(1 << bitIndex);
          }
        }
      }

      yield return (byte) value;
    }
  }
}

То, что вы должны иметь в виду для конверсий:

  • 1: белая точка
  • 0: черная точка
  • width должно быть кратно 8 (поскольку мы отправляем байты) - код выше заботится об этом путем заполнения
  • вращение / ориентация этикетки!
  • здесь реализован некоторый порог ...

Я также реализовал GM - GG, но это выходит за рамки этого ответа. Соответствующий код можно найти в EplCommands.StoreGraphics(bitmap:Bitmap,name:string).

...