Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

Habe ich zu drucken, werden einige Daten auf die thermische bluetooth-Drucker, mache ich mit diesem:

String message="abcdef any message 12345";
byte[] send;
send = message.getBytes();
mService.write(send);

Es funktioniert gut für text, aber nicht für Bilder. Ich glaube, ich brauche, um die byte[] von der Bild-Daten. Ich habe versucht immer die Daten von der Bild so:

Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.qrcode);
ByteArrayOutputStream stream=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
byte[] image=stream.toByteArray();

Leider druckt der Drucker eine Menge von seltsamen Zeichen (ca. 50 cm Papier). Ich weiß nicht, wie das Bild zu drucken.

Möchte ich versuchen, immer die Pixel der bitmap und als Nächstes die Konvertierung in ein byte[] und senden Sie es, aber ich weiß nicht, wie es zu tun.

Dank

UPDATE:

Nach so viel Zeit, ich bin dabei: ich habe eine Methode namens print_image(String Datei), die bekommt den Pfad zum Bild, das ich drucken möchten:

private void print_image(String file) {
    File fl = new File(file);
    if (fl.exists()) {
        Bitmap bmp = BitmapFactory.decodeFile(file);
        convertBitmap(bmp);
        mService.write(PrinterCommands.SET_LINE_SPACING_24);

        int offset = 0;
        while (offset < bmp.getHeight()) {
            mService.write(PrinterCommands.SELECT_BIT_IMAGE_MODE);
            for (int x = 0; x < bmp.getWidth(); ++x) {

                for (int k = 0; k < 3; ++k) {

                    byte slice = 0;
                    for (int b = 0; b < 8; ++b) {
                        int y = (((offset / 8) + k) * 8) + b;
                        int i = (y * bmp.getWidth()) + x;
                        boolean v = false;
                        if (i < dots.length()) {
                            v = dots.get(i);
                        }
                        slice |= (byte) ((v ? 1 : 0) << (7 - b));
                    }
                    mService.write(slice);
                }
            }
            offset += 24;
            mService.write(PrinterCommands.FEED_LINE);
            mService.write(PrinterCommands.FEED_LINE);          
            mService.write(PrinterCommands.FEED_LINE);
            mService.write(PrinterCommands.FEED_LINE);
            mService.write(PrinterCommands.FEED_LINE);
            mService.write(PrinterCommands.FEED_LINE);
        }
        mService.write(PrinterCommands.SET_LINE_SPACING_30);


    } else {
        Toast.makeText(this, "file doesn't exists", Toast.LENGTH_SHORT)
                .show();
    }
}

Ich habe es auf dieser Basis post

Dies ist die Klasse PrinterCommands:

public class PrinterCommands {
public static final byte[] INIT = {27, 64};
public static byte[] FEED_LINE = {10};

public static byte[] SELECT_FONT_A = {27, 33, 0};

public static byte[] SET_BAR_CODE_HEIGHT = {29, 104, 100};
public static byte[] PRINT_BAR_CODE_1 = {29, 107, 2};
public static byte[] SEND_NULL_BYTE = {0x00};

public static byte[] SELECT_PRINT_SHEET = {0x1B, 0x63, 0x30, 0x02};
public static byte[] FEED_PAPER_AND_CUT = {0x1D, 0x56, 66, 0x00};

public static byte[] SELECT_CYRILLIC_CHARACTER_CODE_TABLE = {0x1B, 0x74, 0x11};

public static byte[] SELECT_BIT_IMAGE_MODE = {0x1B, 0x2A, 33, -128, 0};
public static byte[] SET_LINE_SPACING_24 = {0x1B, 0x33, 24};
public static byte[] SET_LINE_SPACING_30 = {0x1B, 0x33, 30};

public static byte[] TRANSMIT_DLE_PRINTER_STATUS = {0x10, 0x04, 0x01};
public static byte[] TRANSMIT_DLE_OFFLINE_PRINTER_STATUS = {0x10, 0x04, 0x02};
public static byte[] TRANSMIT_DLE_ERROR_STATUS = {0x10, 0x04, 0x03};
public static byte[] TRANSMIT_DLE_ROLL_PAPER_SENSOR_STATUS = {0x10, 0x04, 0x04};
}

Als ist gesehen in der print_image Methode rufe ich eine Methode, genannt convertBitmap, und im das senden einer bitmap, das ist der code:

   public String convertBitmap(Bitmap inputBitmap) {

    mWidth = inputBitmap.getWidth();
    mHeight = inputBitmap.getHeight();

    convertArgbToGrayscale(inputBitmap, mWidth, mHeight);
    mStatus = "ok";
    return mStatus;

}

private void convertArgbToGrayscale(Bitmap bmpOriginal, int width,
        int height) {
    int pixel;
    int k = 0;
    int B = 0, G = 0, R = 0;
    dots = new BitSet();
    try {

        for (int x = 0; x < height; x++) {
            for (int y = 0; y < width; y++) {
                //get one pixel color
                pixel = bmpOriginal.getPixel(y, x);

                //retrieve color of all channels
                R = Color.red(pixel);
                G = Color.green(pixel);
                B = Color.blue(pixel);
                //take conversion up to one single value by calculating
                //pixel intensity.
                R = G = B = (int) (0.299 * R + 0.587 * G + 0.114 * B);
                //set bit into bitset, by calculating the pixel's luma
                if (R < 55) {                       
                    dots.set(k);//this is the bitset that i'm printing
                }
                k++;

            }


        }


    } catch (Exception e) {
        //TODO: handle exception
        Log.e(TAG, e.toString());
    }
}

Dies ist die Druckerdie ich verwende, Auflösung: 8 Punkte/mm, 576 dots/line

Und das ist, was ich mag zu tun (ich habe es mit dem gleichen Drucker, aber mit einer app heruntergeladen aus dem play store)
Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

Dies ist, was ich bin jetzt zu bekommen
Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

Näher:
Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

Closer2:
Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

Einen kleinen Teil des Bildes gesehen werden kann, so dass ich denke, ich bin näher an das drucken des Bildes...

Dem Bild, das ich verwende, ist dieser (576x95):Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

- Und dies ist der konvertierte Bild (ich bin konvertieren Sie es mit dem oberen code):
Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

Wie kann ich ein Bild drucken auf einem Bluetooth-Drucker in Android?

So, die Antwort ist: was mache ich falsch?, Ich denke, dass der Fehler in diesem Befehl:

  public static byte[] SELECT_BIT_IMAGE_MODE = {0x1B, 0x2A, 33, -128, 0};

Aber, wie kann ich berechnen, die richtigen Werte für mein Bild?, Dank

InformationsquelleAutor der Frage Leonardo Sapuy | 2013-01-25

Schreibe einen Kommentar