Печать изображения на термопринтер Bluetooth - PullRequest
0 голосов
/ 13 сентября 2018

Здравствуйте, я следовал руководству в посте здесь , и я просто создал свою собственную функцию, аналогичную той, что в руководстве.Но мой принтер все еще не смог распечатать полное изображение.Он печатает только первые 24 строчных точки изображения.Модель принтера RPP02N.

public void printImage(Bitmap bitmap) {
    System.out.println("Width: " + bitmap.getWidth());
    System.out.println("Height: " + bitmap.getHeight());

    List<Boolean> dots = new ArrayList<>();
    for (int i=0;i<bitmap.getHeight();i++) {
        for (int j =0; j < bitmap.getWidth(); j++) {
            int pixel = bitmap.getPixel(j, i);

            if (shouldBeBlack(pixel)) {
                dots.add(true);
            } else {
                dots.add(false);
            }
        }
    }

    resetPrinter();

    try {
        OutputStream outputStream = bluetoothConnectivity.getOutputStream();

        int offset = 0;
        byte[] finalFinalBytes = new byte[]{27, 51, 24};

        while (offset < bitmap.getHeight()) {
            byte[] finalBytes = new byte[]{27, 42, 33, (byte) (bitmap.getWidth()%256), (byte) (bitmap.getWidth()/256)};

            for (int kolom = 0; kolom < bitmap.getWidth(); kolom++) {
                byte[] temp = new byte[3];
                for (int bagian=0; bagian<3; bagian++) {
                    byte slice = 0;

                    for (int bit = 0; bit < 8; bit++) {
                        int baris = ((offset/8) + bagian) * 8 + bit;
                        int index = baris * bitmap.getWidth() + kolom;

                        boolean shouldBlack = false;
                        if (index < dots.size()) {
                            shouldBlack = dots.get(index);
                        }

                        slice = (byte) (slice | (shouldBlack ? 1 : 0) << (7-bit));
                    }
                    temp[bagian] = slice;
                }

                finalBytes = mergeArrayBytes(finalBytes, temp);
            }
            finalBytes = mergeArrayBytes(finalBytes, new byte[]{10});

            finalFinalBytes = mergeArrayBytes(finalFinalBytes, finalBytes);
            offset += 24;
        }

        finalFinalBytes = mergeArrayBytes(finalFinalBytes, new byte[]{27, 51, 30});
        outputStream.write(finalFinalBytes);

        resetPrinter();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Когда я пытался печатать байты после каждой 24-строки, он отлично работает на консоли и не выдает никаких исключений.Что могло пойти не так?

Логотип, который я хочу напечатать: The logo I want to print

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