メモリにロードされた 1bpp モノクロ ビットマップ イメージがあります。画像データをバイト配列にロードしました。Zebraプリンターに印刷しようとしていますが、そのマニュアルに従って、画像データを16進コードに変換してコマンドをプリンターに送信すると、境界ボックスが正しいサイズで印刷されるように見えることを除いて、ほとんどのコードが機能していると思いますが、画像は絶望的にスクランブルされています。
これは、バイト配列を 16 進数に変換するために StackOverflow で見つけた次のメソッドが、リトル エンディアンの順序で調べる必要があるときに、各バイト値をビッグ エンディアンの順序で読み取っているためだと思われます。
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に変換されるようです。
16 進数のビットマップ データ:
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 000 00 00 00 FF1 00 00 00 FF FF FE 00 00 ...
うーん... モノクロ 1bpp ビットマップには 2 つの色しかないと思っていましたか? image4j ConvertUtil.convert1 が他の色を導入したのはなぜですか? これが問題なのだろうか?
編集3:
NVM、各ビットは 1bpp で色を決定するため、各バイトは最大 8 ピクセルを表すことができます。これはおそらく正しいです。