2012-02-22 61 views
0

我想使用他们的SDK将Android位图发送到打印机(移动蓝牙打印机Bixolon SPP R-200)我可以将位图转换为字节数组。为了便于参考(并了解我所采取的措施),请查阅Bixolon Command手册here。这就是我如何进行:从字节数组中确定x和y的高字节和低字节

发送指令到打印机,告诉它,我多么希望我的打印输出对齐(左= 0,右= 2,中心= 1)使用以下命令:

byte[] command = { 27, 97, 0 }; 

27和97是来自Bixolon命令手册的命令 - 零表示“左对齐”。然后,我使用SDK写入(byte [])命令(成功)将此命令发送到打印机。

下一步是我在哪里遇到问题:我想发送的“打印光栅位图”命令到打印机和第一部分是容易的:

byte[] command2 = { 29, 118, 48, 0, 0, 0, 0, 0 }; 

29,118和48一起编制名为“GS v 0”的命令(在上述编号上使用ASCII转换图时的字面翻译),这在参考的Bixolon手册中的第126页中有介绍。第一零设置水平和垂直DPI到203

现在我坚持的部分:

xL xH yL yH d1...d 

我假设到:根据手册,剩余的4个零必须被替换是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位置的高字节和低字节的?

但是 - 将此命令发送到打印机也是如此,在最后一步中,我的位图也被成功转换为字节数组get(也至少没有发生IO错误),但是没有任何内容正在打印(尽管纸张移动并且纸张的左侧似乎有两个像素被打印)。所以我怀疑可能为位图的X和Y坐标高低字节以上的计算是错误的...

回答

0

线

int bytesOfWidth = width/8 + (width % 8 != 0 ? 1 : 0); 
dimensionCommand[4] = (byte) (bytesOfWidth % 256); 
dimensionCommand[5] = (byte) (bytesOfWidth/256); 

看起来很可疑。我将使用与高度相同的计算宽度。我也将使用按位与和位移位而不是%/运营商,这是相当缓慢的比较:

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); 
+0

感谢您的建议 - 我试过了,但仍然没有改变 - 但是这可能是因为打印机通信的另一个问题,所以您的答案可能是正确的,我会继续尝试更多。 – AgentKnopf 2012-02-22 16:43:10

0

失去bytesOfWidth计算,它没有任何意义。只要通过宽度。

该标题后面的字节d1,d2,... d3是栅格* d * ata。根据the online manual这个栅格数据是1 字节每像素,而不是1位,因为我认为你以前的问题假设。

+0

你的意思是像Aleks建议的那样传递它,或者简单地使用:dimensionCommand [4] =(byte)(width);维度命令[5] =(字节)(宽度);维度命令[6] =(字节)(高度); ... 根本没有任何计算? – AgentKnopf 2012-02-22 16:44:42

+0

附加说明:我正在使用Bixolon的SDK方法BxlBitmap.bitmap2printerData(位图,宽度,级别)转换我的位图(使用Bitmap.Config.RGB_565创建),但该方法执行了很多操作,所以我没有有一个保证,我的位图没有搞砸了。但是,然后SDK使用该方法来打印它们的Bitmap,这与我的打印尝试相反。 – AgentKnopf 2012-02-22 16:52:09

+0

我没有看到Aleks的建议,但是,这是完全正确的。 – 2012-02-22 17:44:47