gpt4 book ai didi

JAVA ESC Pos上传NV图形到打印机

转载 作者:太空宇宙 更新时间:2023-11-03 13:49:13 26 4
gpt4 key购买 nike

使用 Esc/Pos,我想将位图图像上传到打印机上的 NV 显存。

我正在使用 GS ( L / GS 8 L <Function 67> Esc/Pos 手册。

我可以使用 <Function 65><Function 66>删除所有或一个图形。

我知道在将位图添加到函数时我遗漏了一些东西。

这是我的命令字符串,包括位图。 bitmapString删除了位图的文件头和信息头(前 62 个字节)(DataOffset)。:

String bitmapString = new String(bitmapBytes, Charsets.US_ASCII);
bitmapString = bitmapString.substring(DataOffset, bitmapStringSize);
String commandString = "";

int commandLength = (bitmapStringSize.length) + 11;
pL = commandLength % 256;
if (commandLength < 256) {
pH = 0;
} else {
pH = (commandLength - pL) / 256;
}

xL = bitmapWidth % 256;
if (bitmapWidth < 256) {
xH = 0;
} else {
xH = (bitmapWidth - (bitmapWidth % 256)) / 256;
}

yL = bitmapHeight % 256;
if (bitmapHeight < 256) {
yH = 0;
} else {
yH = (bitmapHeight - (bitmapHeight % 256)) / 256;
}

commandString
+= Utils.H("1B")// 27
+ Utils.H("40") // 64
+ Utils.H("1B") // 27
+ Utils.H("3D") // 61
+ Utils.H("01") // 1

+ Utils.H("1D") // GS = 29
+ Utils.H("28") // ( = 40
+ Utils.H("4C") // L = 76

+ Utils.D(pL) // pL
+ Utils.D(pH) // pH

+ Utils.H("30") // m = 48
+ Utils.H("43") // fn = 67
+ Utils.H("30") // a = 48

+ Utils.H(KC1) // kc1
+ Utils.H(KC2) // kc2

+ Utils.H("01") // b = 1

+ Utils.D(xL) // xL
+ Utils.D(xH) // xH
+ Utils.D(yL) // yL
+ Utils.D(yH) // yH

+ Utils.H("31");// c = 49

commandString += bitmapString;

我正在使用 ePOS-Print.jar 打开并写入打印机:

EpsonIo epsonio = new EpsonIo();
byte[] commandBytes = commandString.getBytes(Charsets.US_ASCII);

epsonio.open(DevType.BLUETOOTH, MAC, null, ESCPosService.this);

while (n > 0) {

epsonio.write(commandBytes, i, n > bufferSize ? bufferSize : n, SEND_TIMEOUT);

Thread.sleep(450);

i += bufferSize;
n -= bufferSize;
}

但是当我打印图形时它变形了:

enter image description here

最佳答案

我已经解决了这个问题。

发送的位图字节必须使用下面的方法进行解码。该方法将位图像素转换为单色字节。 1 或 0。

希望这对 future 的人有所帮助!

public static byte[] decodeBitmap(byte[] bitmapBytes) {

Bitmap bmp = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length);

int zeroCount = bmp.getWidth() % 8;
String zeroStr = "";
if (zeroCount > 0) {
for (int i = 0; i < (8 - zeroCount); i++) {
zeroStr = zeroStr + "0";
}
}

List<String> list = new ArrayList<>();
for (int i = 0; i < bmp.getHeight(); i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < bmp.getWidth(); j++) {
int color = bmp.getPixel(j, i);

int r = (color >> 16) & 0xff;
int g = (color >> 8) & 0xff;
int b = color & 0xff;

// if color close to white,bit='0', else bit='1'
if (r > 160 && g > 160 && b > 160)
sb.append("0");
else
sb.append("1");
}
if (zeroCount > 0) {
sb.append(zeroStr);
}

list.add(sb.toString());
}

List<String> bmpHexList = binaryListToHexStringList(list);
List<String> commandList = new ArrayList<>();
commandList.addAll(bmpHexList);

return hexListToBytes(commandList);
}

关于JAVA ESC Pos上传NV图形到打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37262647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com