簡體   English   中英

藍牙打印機中的 Xamarin 打印圖像

[英]Xamarin Print Image in bluetooth printer

我正在嘗試使用 Xamarin 本機 android 從藍牙打印機(INTERMEC PB51)打印。

我已經根據以下鏈接編寫了代碼。

如何在 Android 中的藍牙打印機上打印圖像?

我的代碼如下。

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;
    }

但是得到如下圖打印的標志。

在此處輸入圖片說明

  1. Intermec PB51 可以設置多種不同的打印機語言; IPL、指紋、直接協議、ZSim、DSim、CSim 和 ESC/P。 所以首先你必須知道你正在處理哪種打印機語言。 { 0x1B, 0x2A, 33, (byte)255, 0 } 是 ESC/P 中的一個命令,因此打印機必須處於 ESC/P 模式。

  2. 看起來您正在向打印機發送 PNG 圖像數據。 我只在 ESC/P 模式下使用過 Intermec PB51,而在 ESC/P 中,圖像必須轉換為 1 位圖像字節數組(每個打印機“像素”一位)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM