Java 为Zebra打印机将单色位图数据转换为小的endian顺序十六进制字符串
我有一个1bpp单色位图图像加载到内存中。我将图像数据加载到字节数组中。我正试图打印到Zebra打印机上,按照他们的手册,我觉得我大部分代码都能正常工作,只是当我将图像数据转换为hexcode并将命令发送到打印机时,边界框似乎可以打印正确的大小,但图像被无望地乱序了 我怀疑这是因为我在StackOverflow上找到的将字节数组转换为十六进制的方法是,当我需要以小端顺序查看字节值时,以大端顺序读取每个字节值Java 为Zebra打印机将单色位图数据转换为小的endian顺序十六进制字符串,java,bitmap,hex,zebra-printers,zpl,Java,Bitmap,Hex,Zebra Printers,Zpl,我有一个1bpp单色位图图像加载到内存中。我将图像数据加载到字节数组中。我正试图打印到Zebra打印机上,按照他们的手册,我觉得我大部分代码都能正常工作,只是当我将图像数据转换为hexcode并将命令发送到打印机时,边界框似乎可以打印正确的大小,但图像被无望地乱序了 我怀疑这是因为我在StackOverflow上找到的将字节数组转换为十六进制的方法是,当我需要以小端顺序查看字节值时,以大端顺序读取每个字节值 public static String bytesToHex(byte[] b) {
public static String bytesToHex(byte[] b) {
char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
StringBuffer buf = new StringBuffer();
for (int j=0; j<b.length; j++) {
buf.append(hexDigit[b[j] & 0x0f]);
buf.append(hexDigit[(b[j] >> 4) & 0x0f]);
}
return buf.toString().toUpperCase();
}
公共静态字符串bytesToHex(字节[]b){
字符hexDigit[]={'0','1','2','3','4','5','6','7',
‘8’、‘9’、‘a’、‘b’、‘c’、‘d’、‘e’、‘f’};
StringBuffer buf=新的StringBuffer();
对于(int j=0;j>4)和0x0f]);
}
返回buf.toString().toUpperCase();
}
在这一点上,我被卡住了。有人对我如何修改上面的代码,以正确的顺序读取每个字节的值来读取位图图像数据有什么建议吗
编辑:
图片中,詹姆斯·邦德(James Bond)被一个糟糕的弗洛伊德·斯坦伯格(Floyd Steinberg)抖动实现(这完全是另一个问题)弄得一团糟
编辑2:
嗯,这不起作用,看起来当我上传它的时候,它会被转换成PNG
十六进制位图数据:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
嗯。。。我以为单色1bpp位图只有两种可能的颜色?为什么image4j ConvertUtil.convert1引入了其他颜色?我想知道这是否是问题所在
编辑3:
NVM,每个位决定1bpp中的颜色,因此每个字节最多可代表8个像素。这很可能是正确的。如果问题是一点一点的顺序,我会感到惊讶。这些图像可用吗?@trashgood只是为了确定我将用于单色1bpp数据的字节转储到了磁盘上,以进行验证,并确保它是正常的formatted@trashgod我发布了更多信息和位图数据的十六进制输出。我认为你是对的,也许一点一点的顺序不是问题,另一个需要检查的因素是;在您的示例中,31字节*8位/字节=248位。是这样吗?