亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在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 關注
  • 525 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號