ESC / POS растровые данные для изображения - PullRequest
0 голосов
/ 10 мая 2018

Мы можем преобразовать изображение в байтовый массив для отправки на принтер ESC / POS.
Я использую код здесь: https://stackoverflow.com/a/14099717/1853275
это работает как шарм.

простой вопрос: возможно ли преобразовать этот байтовый массив обратно в исходное изображение?
если да, скажите, пожалуйста, как ...

Большее изображение:
Я создал прослушиватель TCP / IP, который действует как принтер POS.
Он получает данные из приложения POS, а затем перенаправляет их на реальный принтер.
между прочим, я должен получить продукты на квитанции и распечатать что-то дополнительное на основе продуктов.
Итак, мне нужно преобразовать графические данные в изображение (затем OCR), чтобы прочитать продукты при получении.

вот одна полученная квитанция ESC / POS:
pastebin.com/vUDHjGuj
(мы можем преобразовать его в байтовый массив, а затем отправить на принтер. Он напечатает квитанцию.)

Я знаю структуру захваченных данных. мы можем удалить команды ESC / POS и разделить массив на 0x0A LF. Мне просто нужен способ преобразовать графические байтовые массивы в изображение и соединить их вместе, чтобы создать изображение чека.
графический режим, отправляемый на принтер: 24-битная удвоенная плотность (0x1B 0x2A 0x21)

помогите пожалуйста ...
большое спасибо

ниже - одна из частей, которые я пробовал, но она дает все черное.
Я отправляю один фрагмент (байт []), с шириной = 512 (из захваченных данных), высотой: 1 (или любой)

public static Bitmap FromByteArray(byte[] ByteArray, Size Size)

{

Bitmap bmp = new Bitmap(Size.Width, Size.Height, PixelFormat.Format24bppRgb);

BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, Size.Width, Size.Height),ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

IntPtr ptr = bmpdata.Scan0;

System.Runtime.InteropServices.Marshal.Copy(ByteArray, 0, ptr, ByteArray.Length);

bmp.UnlockBits(bmpdata);

return bmp;

}

1 Ответ

0 голосов
/ 19 мая 2018

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

В вашем коде нет конкретного "исправления". Похоже, что он основан на некоторых предположениях, которые не основаны на реалиях этого формата данных.

  • Ваш образец файла является изображением? Нет, в файле также есть другие команды (cut, newline), которые вам нужно уметь анализировать и игнорировать для получения данных изображения.
  • Ваш образец файла одного изображения? Нет, в вашем образце 20 небольших изображений тонкими кусочками.
  • Ваше изображение 24 бит на пиксель? Нет, один пиксель размещен в столбцах высотой 24 пикселя. Каждое изображение имеет произвольную ширину, которую вы можете прочитать из данных.
  • Растровые данные располагаются в строках? Нет, это колонна мажор.

Так что, если вы хотите работать с кодом C #, как упомянуто в комментарии, вам нужно правильно изменить процесс в примере C #, который вы связали. Вы можете сообщить об этом с помощью хорошего отладчика, копии документации Epson для ESC * и некоторых небольших файлов примеров для преобразования.

Пример

Абсолютно возможно проанализировать ESC / POS, чтобы восстановить исходное изображение. Я поддерживаю проект с открытым исходным кодом, который делает это, и он обработает ваш файл примера ( github , сообщение в блоге ). Код для разбора ESC * находится в SelectBitImageMode.php . Это не C #, но работает.

Мне пришлось преобразовать файл примера в двоичный файл, чтобы использовать его:

cat esc_pos_graphics_printing_data.txt | tr -d '\r' | tr -d '\n' | \
    python3 -c "import sys, binascii; sys.stdout.buffer.write(binascii.unhexlify(input().strip()))" > \
    esc_pos_graphics_printing_data.bin

Затем, чтобы извлечь изображения из квитанции и присоединиться к ним, я использовал escpos-tools (git, composer, php) плюс ImageMagick:

git clone https://github.com/receipt-print-hq/escpos-tools.git
cd escpos-tools
composer install
php escimages.php --file ../esc_pos_graphics_printing_data.bin 
convert esc_pos_graphics_printing_data-*.png -append output.png

Квитанция:

enter image description here

Удачи!

...