2014-01-17 3 views
1

Привет, ребята, у меня есть следующая проблема: я не могу напечатать мое битовое изображение без белой линии каждые 24 строки. т.е. мне нужно распечатать изображение, но это изображение имеет белые линии каждые 24 строки на бит.Как печатать бит Image TM-T88V

Принтер 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})); 
       } 

спасибо и заблагодаряем!

+0

любая идея ребята? если вам нужна дополнительная информация, просто спросите. – user3207717

+0

Вы нашли решение? Имеет тот же вопрос прямо сейчас. – user2799180

ответ

0

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

1

Итак, я решил эту проблему. Недостаточно установить расстояние между линиями до 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 или, например, Делает принтеры. На этих принтерах я могу использовать стандартный режим для печати изображений.

+0

Марк, что такое «h» в вашем фрагменте кода? С уважением, Олег – Lucyk

+0

'h' - целое число с высотой изображения. –

1

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

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

Reference (must be logged)

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^