Xamarin Print Image в bluetooth-принтере - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь распечатать на принтере 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;
    }

Но с печатью логотипа, как показано на рисунке ниже.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...