Как использовать команду ESC/POS 'GS v 0'
Кто -нибудь может объяснить команду 'GS v 0'? Я хочу напечатать немного Bitmap на моем термопринтере. Я не могу понять параметры xL xH yL...
Ниже приведено руководство по программированию, но до сих пор я не вижу решения.
ASCII: Gs v 0 Десятичное число: 29 118 48 м xL xH yL yH [d]k Шестнадцатеричное: 1D 76 30 m xL xH yL yH [d]k
0 ≤ m ≤ 3, 48 ≤ m ≤ 51 0 ≤ xL ≤ 255 0 ≤ xH ≤ 255 0 ≤ yL ≤ 255 0 ≤ d ≤ 255 k = ( xL + xH × 256) × ( yL + yH × 256) (k ≠ 0)
xL, xH указывает ( xL + xH × 256) байтов в горизонтальном направлении для битового изображения. yL, yH указывает ( yL + yH × 256) точек в вертикальном направлении для битового изображения. [d]k определяет данные битового изображения (растровый формат).
3 ответа
Сначала позвольте мне сказать, что я знаю, что вопрос старый, и эта команда считается устаревшей, но все еще существует огромный рынок термопринтеров, которые принимают эту команду.
На этом аккаунте недостаточно баллов, чтобы написать комментарий к ответу @Fewl.
Он прав относительно yL и yH, но не относительно xL и xH.
xL, xH задает (xL + xH × 256) байтов по горизонтали для битового изображения.
yL, yH задает (yL + yH × 256) точек в вертикальном направлении для битового изображения.
Ссылка: https://www.epson-biz.com/modules/ref_escpos/index.php?content_id=94
Допустим, ваше растровое изображение имеет ширину 384 пикселя и высоту 260 пикселей, тогда:
xL = width % 2048 / 8;
xH = width / 2048;
// width = 384
// xL = 48
// xH = 0
// (xL + xH × 256) = 48 + 0 x 256 = 48 **bytes** in horizontal direction.
yL = height % 256;
yH = height / 256;
//height = 260
// yL = 4
// yH = 1
// (yL + yH × 256) = 4 + 1 x 256 = 260 **dots** in vertical direction
Пояснение, пример битового изображения имеет 384 / 8 = 48 байтов по горизонтали, поскольку 48 < 256, вам не нужно вычислять xH (старший байт), это будет 0. Вам нужно будет вычислить xH, только если ваше растровое изображение шире. чем 8 * 256 = 2048 точек... Что маловероятно с термопринтерами, но я включил даже этот сценарий в приведенный выше код.
Важная заметка! В моем примере ширина (384) делится на 8. Если это не так, вам придется учитывать это, округляя деление и дополняя битовые данные нулями... или просто предварительно изменив размер растрового изображения, чтобы его ширина делилась на 8.
Как уже упоминалось, команда GS v 0 является устаревшим, вместо вы должны попробовать ESC * или GS ( L / GS 8 л.
Но, просто чтобы ответить на вопрос...
xL, xH относятся к ширине растрового изображения, а yL, yH - к высоте, как вы знаете.
Вы сказали, что эти значения должны находиться в диапазоне от 0 до 255, и для этого вы делаете следующее:
xL = width % 256
xH = width / 256
yL = height % 256
yH = height / 256
Итак, допустим, у вас есть изображение размером 300x200 пикселей. Эти значения будут следующими:
xL = 44, xH = 1, yL = 200, yH = 0 (десятичный)
k = (44 + 1 * 256) * (200 + 0 * 256) = 60,000 (что составляет 300x200)
Используя команду Hex, вы получаете: 1D 76 30 m 2C 01 C8 00 [d]k
, где m - режим, а [d]k - данные изображения размером 60 000 байтов.
Используя команду Hex, вы получите: 1D 76 30 m 2C 01 C8 00 [d]k, где m — режим, а [d]k — 60 000 байт данных изображения или 937 байт (8x8).