Я пытаюсь распечатать на принтере Bluetooth (INTERMEC PB51), используя родной андроид Xamarin.
Я написал код на основе ссылки ниже.
Как мне распечататьизображение на принтере Bluetooth в Android?
Мой код указан ниже.
private static byte[] SELECT_BIT_IMAGE_MODE = { 0x1B, 0x2A, 33, (byte)255, 0 };
Создание растрового изображения, как показано ниже.
Bitmap sigImage = BitmapFactory.DecodeResource(Resources, Resource.Drawable.icn_logo_jpg);
Создание Blutooth-сокета.
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;
}
Но с печатью логотипа, как показано на рисунке ниже.