.net ESC/POS位图数据到图像

bis0qfac  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(161)

我们可以将图像转换为字节数组发送到ESC/POS打印机。
我在这里使用代码:https://stackoverflow.com/a/14099717/1853275
就像魅力一样。
简单问题:有可能将这个字节数组转换回原始图像吗?
如果是的话,请告诉我如何……
更大的画面:
我已经创建了一个TCP/IP侦听器,用作POS打印机。
它从POS应用程序接收数据,然后转发到真正的打印机。
在这之间,我必须得到收据上的产品,并根据产品打印一些额外的东西。
所以,我需要将图形数据转换为图像(然后OCR),以读取收货时的产品。
下面是一张捕获ESC/POS收据:
pastebin.com/vUDHjGuj
(we可以将其转换成字节数组,然后发送给打印机。打印收据)。
我知道捕获数据的结构。我们可以删除ESC/POS命令并将数组拆分为0x0A LF。我只需要一种方法来转换图像的图形字节数组,并把切片在一起创建收据的图像。
发送到打印机的图形模式为:24位双密度(0x1B 0x2A 0x21)
请帮帮我
非常感谢
下面是我试过的作品之一,但它给所有黑色。
我发送一个slice(byte []),width = 512(来自捕获的数据),height:1(或任何)

public static Bitmap FromByteArray(byte[] ByteArray, Size Size)

{

Bitmap bmp = new Bitmap(Size.Width, Size.Height, PixelFormat.Format24bppRgb);

BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, Size.Width, Size.Height),ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);

IntPtr ptr = bmpdata.Scan0;

System.Runtime.InteropServices.Marshal.Copy(ByteArray, 0, ptr, ByteArray.Length);

bmp.UnlockBits(bmpdata);

return bmp;

}
cnjp1d6j

cnjp1d6j1#

您正在使用打印机的页面描述语言,所以首先要注意这不是入门级的任务。
在你的代码中,没有特定的“修复”。它似乎是基于一些假设,而这些假设并不以这种数据格式的现实为基础。

  • 您的示例文件是图像吗?不,文件中还有其他命令(cut、换行符),您需要能够解析并忽略这些命令以获取图像数据。
  • 您的示例文件是一个图像?不,在您的示例文件中有20张小图像,以薄片形式呈现。
  • 你的图像是每像素24位?不,每个像素有一位,排列在24像素高的列中。每个图像都有一个任意的宽度,您可以从数据中读取。
  • 栅格数据是否按行布局?不,这是专栏。

因此,如果你想要工作的C#代码,正如在注解中提到的,你需要正确地反转你链接的C#示例中的过程。您可以通过一个好的调试器、一个Epson documentation的副本以及一些要转换的小示例文件来说明这一努力。

示例

解析ESC/POS以恢复原始图像是绝对可能的。我维护了一个开源项目,它可以处理您的示例文件(githubrelated blog post)。解析ESC *的代码位于SelectBitImageMode.php中。它不是C#,但它工作。
我不得不将示例文件转换回二进制文件以使用它:

cat esc_pos_graphics_printing_data.txt | tr -d '\r' | tr -d '\n' | \
    python3 -c "import sys, binascii; sys.stdout.buffer.write(binascii.unhexlify(input().strip()))" > \
    esc_pos_graphics_printing_data.bin

然后,为了从您的收据中提取图像并将其合并,我使用了escpos-toolsgitcomposerphp)加上ImageMagick

git clone https://github.com/receipt-print-hq/escpos-tools.git
cd escpos-tools
composer install
php escimages.php --file ../esc_pos_graphics_printing_data.bin 
convert esc_pos_graphics_printing_data-*.png -append output.png

收据是:

祝你好运!

相关问题