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

时间:2016-06-14 10:20:41

标签: bitmap thermal-printer

请有人解释'GS v 0'命令吗?我想在热敏打印机上打印一些Bitmap。我无法理解参数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指定位图数据(光栅格式)。

2 个答案:

答案 0 :(得分:2)

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

此帐户的积分不足,无法对@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点...这在热pos打印机中极不可能发生,但是我在上面的代码中甚至包含了这种情况。

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

答案 1 :(得分:0)

如上所述,命令 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(十进制)< / p>

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字节图像数据。