我想使用他们的SDK将Android Bitmap发送到打印机(Mobile Bluetooth Printer Bixolon SPP R-200)我可以将Bitmap转换为字节数组。出于参考目的(并了解我正在采取的措施),请查看Bixolon Command手册here。这就是我的进展方式:
使用以下命令向打印机发送命令,告诉它我希望如何对齐打印输出(左= 0,右= 2,居中= 1):
byte[] command = { 27, 97, 0 };
27和97是来自Bixolon Command手册的命令 - 零意味着“左对齐”。然后,我使用SDKs write(byte [])命令(成功)将此命令发送到打印机。
下一步是我遇到麻烦:我想将“打印光栅位图”命令发送到打印机,第一部分很简单:
byte[] command2 = { 29, 118, 48, 0, 0, 0, 0, 0 };
29,118和48一起组成了一个名为“GS v 0”的命令(在上述数字上使用ascii转换图时的字面翻译),参见Bixolon手册中的第126页。第一个零点将水平和垂直DPI设置为203.
现在我坚持的部分:根据手册,剩余的4个零必须被替换为:
xL xH yL yH d1...d
我假设是x位低字节,x位高字节,y位低字节等...(不知道d1 ... d代表什么?)。
在SDK中,他们使用以下代码填充最后4个字节:
int width = myBitmap.getWidth();
int height = myBitmap.getHeight();
int bytesOfWidth = width / 8 + (width % 8 != 0 ? 1 : 0);
dimensionCommand[4] = (byte) (bytesOfWidth % 256);
dimensionCommand[5] = (byte) (bytesOfWidth / 256);
dimensionCommand[6] = (byte) (height % 256);
dimensionCommand[7] = (byte) (height / 256);
但我不明白为什么。这是你如何计算x / y位置的高字节和低字节?
但是 - 将此命令发送到打印机也可以正常工作,并且在最后一步中,我已经转换为字节数组的Bitmap也成功传输(至少没有发生IO错误),但没有打印任何内容(尽管纸张移动,纸张左侧似乎有两个像素打印)。所以我怀疑上面对Bitmap的x和y坐标的高低字节计算是错误的...
答案 0 :(得分:0)
行
int bytesOfWidth = width / 8 + (width % 8 != 0 ? 1 : 0);
dimensionCommand[4] = (byte) (bytesOfWidth % 256);
dimensionCommand[5] = (byte) (bytesOfWidth / 256);
看起来很可疑。我会使用与高度相同的宽度计算。我还会使用按位AND和位移而不是%
和/
运算符,这些运算符相当慢:
int width = myBitmap.getWidth();
int height = myBitmap.getHeight();
dimensionCommand[4] = (byte) (width & 0xFF);
dimensionCommand[5] = (byte) ((width >> 8) & 0xFF);
dimensionCommand[6] = (byte) (height & 0xFF);
dimensionCommand[7] = (byte) ((height >> 8) & 0xff);
答案 1 :(得分:0)
丢失了bytesOfWidth计算,它没有意义。只需通过宽度。
此标题后面的字节d1,d2,... d3是栅格* d * ata。根据{{3}},这个栅格数据是每个像素1 字节,而不是我认为您之前的问题假设的1位。