ESC/POS быстро печатает большие растровые изображенияJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 ESC/POS быстро печатает большие растровые изображения

Сообщение Anonymous »

Я работаю с принтерами Epson ESC/POS (TM-H6000 III). Моя цель — напечатать довольно большие PNG-файлы с базой 64. Мне удалось преобразовать мои PNG в монохромные растровые изображения.
Я могу успешно распечатать их с помощью команды GS V 0, используя этот код, если они меньше буфера (4096 байт). Если они больше, я могу разрезать их на несколько небольших растровых изображений и отправлять их одно за другим, чтобы воссоздать полную картину. Однако мне приходится ждать около одной секунды между каждым вызовом GS V 0, иначе принтер выдаст ошибку и напечатает ерунду. Это делает печать большого изображения очень медленной.
Я также пробовал GS ( L, но не смог заставить его работать. ESC * почти работает, печатает очень быстро, проблема в том, что моя картинка обрезана белыми полосами (см.: https://imgur.com/zYnPuZb) и случайным текстом и я не знаю, что делаю не так, не могу получить GS D. для работы все.
Как правильно напечатать большое растровое изображение за разумное время?
РЕДАКТИРОВАТЬ: я попытался адаптировать код и создать оболочка для GS (команды L 65/67/69. Но когда я использую ее, светодиод ошибки моего принтера становится красным, и ничего не печатается. Вот мой код:
import java.io.ByteArrayOutputStream;

/**
* Implements function GS ( L #65: Delete all NV graphics data, function
* GS ( L #67: Define the NV graphics data (raster format), and function
* GS ( L #69: Print the specified NV graphics.
*
* @see Epson: Paper Roll/Cut Sheet Printers, ESC/POS Application Programming
* Guide, pp. 333, 335, 345
*/
public class NvGraphicsImageWrapper implements EscPosConst, ImageWrapperInterface{

/**
* Values for Raster Bit Image mode.
* @see #setGraphicsImageBxBy(GraphicsImageBxBy)
*/
public enum GraphicsImageBxBy {
Normal_Default(1,1),
DoubleWidth(2,1),
DoubleHeight(1,2),
Quadruple(2, 2);
public int bx;
public int by;
private GraphicsImageBxBy(int bx, int by){
this.bx = bx;
this.by = by;
}
}

protected GraphicsImageBxBy graphicsImageBxBy;

public NvGraphicsImageWrapper() {
graphicsImageBxBy = GraphicsImageBxBy.Normal_Default;
}

/**
* Set values of Bx and By referring to the image size.
*
* @param graphicsImageBxBy values used by function 112
* @return this object
* @see #getBytes(EscPosImage)
*/
public NvGraphicsImageWrapper setGraphicsImageBxBy(final GraphicsImageBxBy graphicsImageBxBy) {
this.graphicsImageBxBy = graphicsImageBxBy;
return this;
}

/**
* Delete all NV graphics data.
* @see p.333
*/
private void getBytesFunction65(final ByteArrayOutputStream bytes) {
final int pL = 5;
final int pH = 0;
final int m = 48;
final int fn = 65;
final int d1 = 67;
final int d2 = 76;
final int d3 = 82;

bytes.write(GS);
bytes.write('(');
bytes.write('L');
bytes.write(pL);
bytes.write(pH);
bytes.write(m);
bytes.write(fn);
bytes.write(d1);
bytes.write(d2);
bytes.write(d3);
}

/**
* Define the NV graphics data (raster format).
* @see p.335
*/
private void getBytesFunction67(final ByteArrayOutputStream bytes, final EscPosImage image, final int kc1, final int kc2) {
/**
* Number of parameters (bytes) AFTER pH.
*/
final int paramSize = image.getRasterSizeInBytes() + 11;
final int pL = paramSize & 0xFF;
final int pH = (paramSize & 0xFF00) >> 8;

final int m = 48;
final int fn = 67;
final int a = 48;

final int b = 1;

// Bits in horizontal direction for the bit image
final int horizontalBits = image.getWidthOfImageInBits();
final int xL = horizontalBits & 0xFF;
final int xH = (horizontalBits & 0xFF00) >> 8;

// Bits in vertical direction for the bit image
final int verticalBits = image.getHeightOfImageInBits();
final int yL = verticalBits & 0xFF;
final int yH = (verticalBits & 0xFF00) >> 8;

final int c = 49; // 49 = monochrome

final byte [] rasterBytes = image.getRasterBytes().toByteArray();

bytes.write(GS);
bytes.write('(');
bytes.write('L');
bytes.write(pL);
bytes.write(pH);
bytes.write(m);
bytes.write(fn);
bytes.write(a);
bytes.write(kc1);
bytes.write(kc2);
bytes.write(b);
bytes.write(xL);
bytes.write(xH);
bytes.write(yL);
bytes.write(yH);
bytes.write(c);

// Write raster bytes
bytes.write(rasterBytes, 0, rasterBytes.length);
}

/**
* @see p.326
*/
private void getBytesFunction69(final ByteArrayOutputStream bytes, final int kc1, final int kc2) {
final int pL = 6;
final int pH = 0;
final int m = 48;
final int fn = 69;

final int x = 1;
final int y = 1;

bytes.write(GS);
bytes.write('(');
bytes.write('L');
bytes.write(pL);
bytes.write(pH);
bytes.write(m);
bytes.write(fn);
bytes.write(kc1);
bytes.write(kc2);
bytes.write(x);
bytes.write(y);
}

@Override
public byte[] getBytes(final EscPosImage image) {
final ByteArrayOutputStream bytes = new ByteArrayOutputStream();

/**
* Codes that will be used to load this data. Range: 32-126.
*/
final int kc1 = 65;
final int kc2 = 66;

getBytesFunction65(bytes);
getBytesFunction67(bytes, image, kc1, kc2);
getBytesFunction69(bytes, kc1, kc2);

return bytes.toByteArray();
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... itmap-fast
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ESC/POS быстро печатает большие растровые изображения
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • ESC/POS быстро печатает большие растровые изображения
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • ESC/POS быстро печатает большие растровые изображения
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Печать изображения ESC/POS
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как печатать изображения с командами ESC/POS?
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»