title: Print Image Via Bluetooth Printer
body: <p>I want to print image on bluetooth printer receipt but i am getting characters. I have tried basic logic that we apply to write image in external file.
  here it is : </p>
  
  <pre><code>void sendData() throws IOException {
  
  
  
  Bitmap imageBit = BitmapFactory.decodeFile(strPath);
  
          ByteArrayOutputStream blob = new ByteArrayOutputStream();
          imageBit.compress(CompressFormat.PNG, 0, blob);
          byte[] bitmapdata = blob.toByteArray();
  
          image.setImageBitmap(imageBit);
  
  
          mmOutputStream.write(bitmapdata);
          // tell the user data were sent
          myLabel.setText("Data Sent");
  
      }
  </code></pre>
  
  <p>Here it is complete code please help me:</p>
  
  <pre><code>package com.example.bluetoothnew;
  
  import android.annotation.TargetApi;
  import android.app.Activity;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  import android.bluetooth.BluetoothSocket;
  import android.content.Intent;
  import android.graphics.Bitmap;
  import android.graphics.Bitmap.CompressFormat;
  import android.graphics.BitmapFactory;
  import android.os.Build;
  import android.os.Bundle;
  import android.os.Handler;
  import android.util.Base64;
  import android.view.View;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.EditText;
  import android.widget.Button;
  
  import java.io.BufferedInputStream;
  import java.io.BufferedReader;
  import java.io.ByteArrayOutputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.nio.ByteBuffer;
  import java.util.Set;
  import java.util.UUID;
  
  public class MainActivity extends Activity {
  
      // will show the statuses
      TextView myLabel;
  
      // will enable user to enter any text to be printed
      EditText myTextbox;
  
      // android built in classes for bluetooth operations
      BluetoothAdapter mBluetoothAdapter;
      BluetoothSocket mmSocket;
      BluetoothDevice mmDevice;
  
      OutputStream mmOutputStream;
      InputStream mmInputStream;
      Thread workerThread;
      String strPath = "/sdcard/transparent.png";
      byte[] buffer = null;
  
      byte[] readBuffer;
      int readBufferPosition;
      int counter;
      volatile boolean stopWorker;
      ImageView image;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          try {
  
              // we are goin to have three buttons for specific functions
              Button openButton = (Button) findViewById(R.id.open);
              Button sendButton = (Button) findViewById(R.id.send);
              Button closeButton = (Button) findViewById(R.id.close);
              image = (ImageView) findViewById(R.id.imageView1);
              myLabel = (TextView) findViewById(R.id.label);
              myTextbox = (EditText) findViewById(R.id.entry);
  
              // open bluetooth connection
              openButton.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                      try {
                          findBT();
                          openBT();
                      } catch (IOException ex) {
                      }
                  }
              });
  
              // send data typed by the user to be printed
              sendButton.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                      try {
                          sendData();
                      } catch (IOException ex) {
                      }
                  }
              });
  
              // close bluetooth connection
              closeButton.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                      try {
                          closeBT();
                      } catch (IOException ex) {
                      }
                  }
              });
  
          } catch (NullPointerException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  
      /*
       * This will find a bluetooth printer device
       */
      void findBT() {
  
          try {
              mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  
              if (mBluetoothAdapter == null) {
                  myLabel.setText("No bluetooth adapter available");
              }
  
              if (!mBluetoothAdapter.isEnabled()) {
                  Intent enableBluetooth = new Intent(
                          BluetoothAdapter.ACTION_REQUEST_ENABLE);
                  startActivityForResult(enableBluetooth, 0);
              }
  
              Set&lt;BluetoothDevice&gt; pairedDevices = mBluetoothAdapter
                      .getBondedDevices();
              if (pairedDevices.size() &gt; 0) {
                  for (BluetoothDevice device : pairedDevices) {
  
                      // MP300 is the name of the bluetooth printer device
                      if (device.getName().equals("EPX58P")) {
                          mmDevice = device;
                          break;
                      }
                  }
              }
              myLabel.setText("Bluetooth Device Found");
          } catch (NullPointerException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  
      /*
       * Tries to open a connection to the bluetooth printer device
       */
      void openBT() throws IOException {
          try {
              // Standard SerialPortService ID
              UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
              mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
              mmSocket.connect();
              mmOutputStream = mmSocket.getOutputStream();
              mmInputStream = mmSocket.getInputStream();
  
              beginListenForData();
  
              myLabel.setText("Bluetooth Opened");
          } catch (NullPointerException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  
      /*
       * After opening a connection to bluetooth printer device, we have to listen
       * and check if a data were sent to be printed.
       */
      void beginListenForData() {
          try {
              final Handler handler = new Handler();
              // This is the ASCII code for a newline character
              final byte delimiter = 10;
  
              stopWorker = false;
              readBufferPosition = 0;
              readBuffer = new byte[1024];
  
              workerThread = new Thread(new Runnable() {
                  public void run() {
                      while (!Thread.currentThread().isInterrupted()
                              &amp;&amp; !stopWorker) {
  
                          try {
  
                              int bytesAvailable = mmInputStream.available();
                              if (bytesAvailable &gt; 0) {
                                  byte[] packetBytes = new byte[bytesAvailable];
                                  mmInputStream.read(packetBytes);
                                  for (int i = 0; i &lt; bytesAvailable; i++) {
                                      byte b = packetBytes[i];
                                      if (b == delimiter) {
                                          byte[] encodedBytes = new byte[readBufferPosition];
                                          System.arraycopy(readBuffer, 0,
                                                  encodedBytes, 0,
                                                  encodedBytes.length);
                                          final String data = new String(
                                                  encodedBytes, "US-ASCII");
                                          readBufferPosition = 0;
  
                                          handler.post(new Runnable() {
                                              public void run() {
                                                  myLabel.setText(data);
                                              }
                                          });
                                      } else {
                                          readBuffer[readBufferPosition++] = b;
                                      }
                                  }
                              }
  
                          } catch (IOException ex) {
                              stopWorker = true;
                          }
  
                      }
                  }
              });
  
              workerThread.start();
          } catch (NullPointerException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
  
      }
  
      /*
       * This will send data to be printed by the bluetooth printer
       */
      @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
      void sendData() throws IOException {
  
          Bitmap imageBit = BitmapFactory.decodeFile(strPath);
  
          ByteArrayOutputStream blob = new ByteArrayOutputStream();
          imageBit.compress(CompressFormat.PNG, 0, blob);
          byte[] bitmapdata = blob.toByteArray();
  
          image.setImageBitmap(imageBit);
  
          // the text typed by the user
          // String msg =
          // "Hello fjgfh gjfhgjfhgf gjfgjhfj hgfhgjfh hgjfhgjf jhgfjghf" +
          // "gkjfgjkfgjfjkfgjfkgf\ndfdfdfddfd" +
          // "fdfdf" +
          // "";
          // msg += "\n";
          // mmOutputStream.write(PrinterCommands.SET_LINE_SPACING_24);
          // mmOutputStream.write(PrinterCommands.FEED_LINE);
          // mmOutputStream.write(PrinterCommands.SELECT_PRINT_SHEET);
          // mmOutputStream.write(msg.getBytes());
          mmOutputStream.write(bitmapdata);
          // tell the user data were sent
          myLabel.setText("Data Sent");
  
      }
  
      /*
       * Close the connection to bluetooth printer.
       */
      void closeBT() throws IOException {
          try {
              stopWorker = true;
              mmOutputStream.close();
              mmInputStream.close();
              mmSocket.close();
              myLabel.setText("Bluetooth Closed");
          } catch (NullPointerException e) {
              e.printStackTrace();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>here is xml file</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" &gt;
  
      &lt;TextView
          android:id="@+id/label"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="Type here:" /&gt;
  
      &lt;EditText
          android:id="@+id/entry"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/label"
          android:background="@android:drawable/editbox_background" /&gt;
  
      &lt;Button
          android:id="@+id/open"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:layout_below="@id/entry"
          android:layout_marginLeft="10dip"
          android:text="Open" /&gt;
  
      &lt;Button
          android:id="@+id/send"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignTop="@id/open"
          android:layout_toLeftOf="@id/open"
          android:text="Send" /&gt;
  
      &lt;Button
          android:id="@+id/close"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignTop="@id/send"
          android:layout_toLeftOf="@id/send"
          android:text="Close" /&gt;
  
      &lt;ImageView
          android:id="@+id/imageView1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentLeft="true"
          android:layout_below="@+id/close"
          android:layout_marginLeft="25dp"
          android:src="@drawable/ic_launcher" /&gt;
  
    &lt;/RelativeLayout&gt;
  </code></pre>