如何使用ESC/POS命令'GS v 0'

问题描述 投票:0回答:3

请有人解释一下“GS v 0”命令吗?我想在热敏打印机上打印一些位图。我无法理解参数 xL xH yL ...

以下是编程指南中的内容,但到目前为止我还看不到解决方案。

ASCII:Gs v 0 十进制:29 118 48 m 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 指定位图数据(光栅格式)。

bitmap thermal-printer
3个回答
6
投票

首先我要说的是,我知道这个问题已经很老了,这个命令被认为已经过时了,但是接受这个命令的热敏打印机仍然有一个巨大的市场。

此帐户上的积分不足,无法对 @Fewl 的答案发表评论。

他关于 yL 和 yH 的说法正确,但关于 xL 和 xH 的说法不正确。

xL, xH 指定位图水平方向的 (xL + xH × 256) bytes

yL, yH 指定位图垂直方向的 (yL + yH × 256) 个dots

参考: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 you don't need to calculate xH (High byte) it will be 0. You would only need to calculate xH if your bitmap is wider than 8 * 256 = 2048 dots... Which is highly unlikely to happen with thermal pos printers but I've included even that scenario in the code above.

重要提示!我的示例宽度 (384) 可以被 8 整除。如果不是,您将必须通过舍入除法并用零填充位数据来解决这个问题...或者简单地预先调整位图的大小,使其宽度可以被 8 整除8.


1
投票

如前所述,命令 GS v 0 已过时,您应该尝试 ESC *GS ( L / GS 8 L

但是,只是为了回答这个问题...

如您所知,

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)

使用十六进制命令,您有:

1D 76 30 m 2C 01 C8 00 [d]k
,其中 m 是模式,[d]k 是 60.000 字节图像数据。


0
投票

使用十六进制命令,您有:1D 76 30 m 2C 01 C8 00 [d]k,其中 m 是模式,[d]k 是 60.000 bites 图像数据或 937 字节 (8x8)。

© www.soinside.com 2019 - 2024. All rights reserved.