为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android的蓝牙打印机上打印图像?

如何在Android的蓝牙打印机上打印图像?

米琪卡哇伊 2019-12-11 13:09:02
我必须在热蓝牙打印机上打印一些数据,我正在这样做:String message="abcdef any message 12345";byte[] send;send = message.getBytes();mService.write(send);它适用于文本,但不适用于图像。我想我需要获取byte[]图像数据。我尝试通过这种方式获取图像数据:Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.qrcode);ByteArrayOutputStream stream=new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);byte[] image=stream.toByteArray();不幸的是,打印机打印了许多奇怪的字符(大约50厘米的纸张)。我不知道如何打印图像。我想尝试获取位图的像素,然后将其转换为a byte[]并发送,但是我不知道该怎么做。谢谢
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

我也尝试过此方法,得到了自己的解决方案,我想我已经弄清楚了SELECT_BIT_IMAGE_MODE命令的工作原理。


该命令public static byte[] SELECT_BIT_IMAGE_MODE = {0x1B, 0x2A, 33, 255, 3};在类PrinterCommands是POS命令图像打印。


前两个是非常标准的,接下来的三个确定要打印图像的模式和尺寸。为了这个解决方案,我们假设第二个元素(33,我们的索引为零)始终为33。


该byte []的最后两个元素是指您要打印的图像的Width(以像素为单位)属性,元素3有时称为nL,元素4有时称为nH。他们实际上都指的宽度,nL是Low Byte同时nH是High Byte。这意味着我们最多可以拥有一个宽度为1111 1111 1111 1111b(二进制)的图像,该宽度为65535d(十进制),尽管我尚未尝试过。如果未将nL或nH设置为正确的值,则将随图像一起打印垃圾字符。


某种程度上,Android文档告诉我们字节数组中字节值的限制为-128和+127,当我尝试输入255时,Eclipse要求我将其转换为Byte。


无论如何,回到nL和nW,对于您的情况,您有一个宽度为576的图像,如果将576转换为Binary,我们将得到两个字节,如下所示:


0000 0010 0100 0000


在这种情况下,低字节为0100 0000,高字节为0000 0010。将其转换回十进制,我们得到nL = 64和nH = 2。


在我的情况下,我打印了一个宽度为330px的图像,将330转换为二进制,我们得到:


0000 0001 0100 1010


现在,在这种情况下,低字节为0100 1010,高字节为0000 0001。转换为十进制,我们得到nL = 74和nH = 1。



查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 447 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信