我有一个 1bpp 单色位图图像加载到内存中。我将图像数据加载到字节数组中。我正在尝试打印到 Zebra 打印机并按照他们的手册进行操作,我觉得我的代码大部分都在工作,除了当我将图像数据转换为十六进制代码并将命令发送到打印机时,边界框似乎打印正确的尺寸,但是图像被无可救药地打乱了。
我怀疑这是因为我在 StackOverflow 上找到的以下用于将字节数组转换为十六进制的方法是在我需要它以 Little Endian 顺序查看时以 Big Endian 顺序读取每个字节值。
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();
}
在这一点上,我被困住了。有没有人有任何建议我可以修改上面的代码以正确的顺序读取每个字节值以读取位图图像数据?
编辑:
图像,它是詹姆斯邦德与一个糟糕的临时弗洛伊德斯坦伯格抖动实现(这完全是一个不同的问题)......
编辑2:
好吧,那不起作用,看起来当我上传它然后它被转换为PNG。
十六进制位图数据:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 FF FF FF 00 00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 0 0 01 0 0 0 0 0 0 00 0 0 0 00 00 00 FF FF FE 00 00 ...
嗯...我认为单色 1bpp 位图只有两种可能的颜色?为什么 image4j ConvertUtil.convert1 引入了其他颜色?我想知道这是不是问题?
编辑 3:
NVM,每个位决定了1bpp中的颜色,所以每个字节最多可以表示8个像素。这很可能是正确的。