[英]Xamarin Print Image in bluetooth printer
我正在嘗試使用 Xamarin 本機 android 從藍牙打印機(INTERMEC PB51)打印。
我已經根據以下鏈接編寫了代碼。
我的代碼如下。
private static byte[] SELECT_BIT_IMAGE_MODE = { 0x1B, 0x2A, 33, (byte)255, 0 };
制作位圖如下。
Bitmap sigImage = BitmapFactory.DecodeResource(Resources, Resource.Drawable.icn_logo_jpg);
創建藍牙插座。
BluetoothSocket socket = null;
BufferedReader inReader = null;
BufferedWriter outReader = null;
string bt_printer = address; //AdminSettings.PrinterMACAddr;
if (string.IsNullOrEmpty(bt_printer)) bt_printer = "00:13:7B:49:D1:8C";
BluetoothDevice mmDevice = BluetoothAdapter.DefaultAdapter.GetRemoteDevice(bt_printer);
UUID applicationUUID = UUID.FromString("00001101-0000-1000-8000-00805F9B34FB");
socket = mmDevice.CreateRfcommSocketToServiceRecord(applicationUUID);
socket.Connect();
調用方式
PrintImage(bitMap, socket);
創建打印方法
public void PrintImage(Bitmap bitmap, BluetoothSocket _socket)
{
try
{
if (!_socket.IsConnected)
{
_socket.Connect();
}
MemoryStream stream = new MemoryStream();
//IMAGE
byte[] imageData = ImageToByte2(bitmap);
stream.Write(imageData, 0, imageData.Length);
stream.Write(SELECT_BIT_IMAGE_MODE, 0, SELECT_BIT_IMAGE_MODE.Length);
var bytes = stream.ToArray();
_socket.OutputStream.Write(bytes, 0, bytes.Length);
// Java.Lang.Thread.Sleep(2000);
//END IMAGE
Java.Lang.Thread.Sleep(2000);
}
catch (Exception ex)
{
throw new Exception("Unable to print. Please re-configure the printer and try again!");
}
}
public static byte[] ImageToByte2(Bitmap bitmap)
{
MemoryStream stream = new MemoryStream();
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
byte[] bitmapData = stream.ToArray();
return bitmapData;
}
但是得到如下圖打印的標志。
Intermec PB51 可以設置多種不同的打印機語言; IPL、指紋、直接協議、ZSim、DSim、CSim 和 ESC/P。 所以首先你必須知道你正在處理哪種打印機語言。 { 0x1B, 0x2A, 33, (byte)255, 0 } 是 ESC/P 中的一個命令,因此打印機必須處於 ESC/P 模式。
看起來您正在向打印機發送 PNG 圖像數據。 我只在 ESC/P 模式下使用過 Intermec PB51,而在 ESC/P 中,圖像必須轉換為 1 位圖像字節數組(每個打印機“像素”一位)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.