我们可以将图像转换为字节数组发送到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;
}
1条答案
按热度按时间cnjp1d6j1#
您正在使用打印机的页面描述语言,所以首先要注意这不是入门级的任务。
在你的代码中,没有特定的“修复”。它似乎是基于一些假设,而这些假设并不以这种数据格式的现实为基础。
因此,如果你想要工作的C#代码,正如在注解中提到的,你需要正确地反转你链接的C#示例中的过程。您可以通过一个好的调试器、一个Epson documentation的副本以及一些要转换的小示例文件来说明这一努力。
示例
解析ESC/POS以恢复原始图像是绝对可能的。我维护了一个开源项目,它可以处理您的示例文件(github,related blog post)。解析
ESC *
的代码位于SelectBitImageMode.php中。它不是C#,但它工作。我不得不将示例文件转换回二进制文件以使用它:
然后,为了从您的收据中提取图像并将其合并,我使用了
escpos-tools
(git
,composer
,php
)加上ImageMagick
:收据是:
祝你好运!