3

I try to print an image via USB like this post but It only prints non-character and my printer is brother HL-5340D.

SELECT_BIT_IMAGE_MODE command

public final static byte[] SELECT_BIT_IMAGE_MODE = {0x1B, 0x2A, 33, 255,3};

here is my printing method

private void printImage(Bitmap bmp) {
    convertBitmap(bmp);
    connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.INIT_PRINTER, PrinterCommands.INIT_PRINTER.length, 100000);
    connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.SET_LINE_SPACE_24, PrinterCommands.SET_LINE_SPACE_24.length, 100000);

    int offset = 0;
    while (offset < bmp.getHeight()) {
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.SELECT_BIT_IMAGE_MODE, PrinterCommands.SELECT_BIT_IMAGE_MODE.length, 100000);

        for (int x = 0; x < bmp.getWidth(); ++x) {
            byte slice = 0;
            byte[] imageDataLine = new byte[bmp.getWidth()];

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


                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));
                    imageDataLine[x] = slice;
                }
            }
            connection.bulkTransfer(mEndpointBulkOut, imageDataLine, imageDataLine.length, 100000);
        }
        offset += 24;
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.LINE_FEED, PrinterCommands.LINE_FEED.length, 100000);
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.LINE_FEED, PrinterCommands.LINE_FEED.length, 100000);
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.LINE_FEED, PrinterCommands.LINE_FEED.length, 100000);
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.LINE_FEED, PrinterCommands.LINE_FEED.length, 100000);
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.LINE_FEED, PrinterCommands.LINE_FEED.length, 100000);
        connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.LINE_FEED, PrinterCommands.LINE_FEED.length, 100000);

    }
    connection.bulkTransfer(mEndpointBulkOut, PrinterCommands.SET_LINE_SPACE_30, PrinterCommands.SET_LINE_SPACE_30.length, 100000);


}

Did I do something wrong?

Community
  • 1
  • 1
Hiếu Giề
  • 97
  • 1
  • 16

0 Answers0