Как распечатать бит Image TM-T88V

Я не могу распечатать мое растровое изображение без белой линии каждые 24 строки. Мне нужно распечатать изображение, но на этом изображении есть белые линии, каждые 24 строки в битах.

Принтер epson распечатает изображение в следующем формате.

>line 23 01010101000010001010
>line 24 00001000100000000110
>line 25 --------- white line ------------

Как удалить эту чертову белую линию?

    Image size
    width:400px
    height:73px
        
    while (offset < height) 
    {
    //format ESC* Epson printer
    String modIMG = new String(new byte[]{0x1B, 0x2A, 33, 0, 2});
        img.append(modIMG);     
            for (int x = 0; x < width; ++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 * width) + x;
                    boolean v = false;
                        if (i < bitSet.length()) {
                            v = bitSet.get(i);}
                            slice |= (byte) ((v ? 1 : 0) << (7 - b));
                        }   
                        img.slice(new String(new byte[] {slice}));
                    }
                }
                offset += 24;
                img.append(new String(new String(new byte[]{0x1B,0x33,30}));
                }

person user3207717    schedule 17.01.2014    source источник
comment
есть идеи, ребята? если вам нужна дополнительная информация, просто спросите.   -  person user3207717    schedule 24.01.2014
comment
Вы нашли решение?? Имея тот же вопрос прямо сейчас.   -  person user2799180    schedule 14.02.2014


Ответы (4)


Вот и решил эту проблему. Недостаточно установить межстрочный интервал на 24 точки с помощью ESC '3' 24, но вы должны распечатать изображение в страничном режиме.

Чтобы войти в режим страницы: ESC 'L'

Затем вам нужно установить область изображения с помощью ESC 'W', здесь я делаю это на C:

           h2 = h * 2 + 30;
            /* Set the printing area, h * 2 because of double density */
            seq[0] = 0x1b;
            seq[1] = 'W';
            seq[2] = 0;     /* xl */
            seq[3] = 0;     /* xh */
            seq[4] = 0;     /* yl */
            seq[5] = 0;     /* yh */
            seq[6] = 0;     /* dxl */
            seq[7] = 2;     /* dxh */
            seq[8] = h2 % 256;      /* dyl */
            seq[9] = h2 / 256;      /* dyh */
            if (write(fd, seq, 10) != 10)
                    goto finish;

Теперь отправьте данные изображения и, наконец, напечатайте с отправкой 0x0c, это также вернет принтер в стандартный режим.

При использовании страничного режима белые полосы на изображении исчезли.

Кстати, это кажется странным для принтеров EPSON TM-T88, я не вижу этих белых линий ни на TM-T500A, ни, например, Принтеры Aures. На этих принтерах я могу использовать стандартный режим для печати изображений.

person Marc Balmer    schedule 17.08.2014
comment
Марк, что такое "h" в вашем фрагменте кода? С уважением, Олег - person Lucyk; 05.09.2016
comment
'h' - целое число с высотой изображения. - person Marc Balmer; 31.12.2016

Я решил, что установил режим страницы, следуя примеру Марка Балмера, но мне нужно отправить канал для 24 * 2 точек (удвоенная плотность строки), чтобы заставить его работать: Итак, после каждого фрагмента данных отправляйте команду ESC J n байтов {27, 74, 48}. И вот наконец получил!

Надеюсь, это поможет!

Ссылка (должна быть зарегистрирована)

person ZeroWorks    schedule 28.01.2017

Попробуйте отправить команду ESC / POS (0x1B, '3', 24) перед печатью. Это устанавливает межстрочный интервал на 24 точки, а не на 30 по умолчанию.

person kutar    schedule 23.03.2014

Просто чтобы подтвердить то, что предлагали другие люди, мне удалось удалить белые линии между полосами данных с помощью «ESC30». Вы можете увидеть фактический код (Haskell) и результаты здесь.

person trandi    schedule 29.11.2017
comment
Но в видео по вашей ссылке ... я все еще вижу строчки .. - person Peter O; 07.11.2019