1

我有一台 Epson-TMH6000III 热敏打印机,我想使用 ESC/POS 命令打印一些位图。

但在此之前,我想用 ESC/POS 打印图像命令打印一个非常简单的单行。

这是我的尝试:

namespace printingImageMode
{
    class Program
    {
        static void Main(string[] args)
        {
            Bitmap bmp = new Bitmap(@"C:\Users\falamarzi\Desktop\Kyan Graphic Viewer\jTest.jpg");

            int msb = (int)(bmp.Width & 0x0000ff00) >> 8;
            int lsb = (int)(bmp.Width & 0x000000ff);

        byte msbB = Convert.ToByte(msb);
        byte lsbB = Convert.ToByte(lsb);

        byte[] enter_To_Image_Printing_Mode_Command = new byte[] { (byte)AsciiControlChars.ESC, (byte)DensityCommand.EightDot_SD, msbB, lsbB };

        byte[] imageData = new byte[lsb + msb * 256];

        for (int i = 0; i < imageData.Length; i++)
        {
            imageData[i] = 0xff;
        }

        byte[] complete_Command = new byte[enter_To_Image_Printing_Mode_Command.Length + imageData.Length];

        enter_To_Image_Printing_Mode_Command.CopyTo(complete_Command, 0);
        imageData.CopyTo(complete_Command, enter_To_Image_Printing_Mode_Command.Length);

        SerialPort sPort = new SerialPort("COM5");
        sPort.Open();

        sPort.Write(complete_Command, 0, complete_Command.Length);
    }

}

public enum AsciiControlChars : byte
{
    ESC = 0x1b,
}

    public enum DensityCommand : byte
    {
        EightDot_SD = 0x00,
        EightDot_DD = 0x01,
        TwentyFourDot_SD = 0x20,
        TwentyFourDot_DD = 0x21,
    }
}

我没有得到结果。我感谢您在这方面的任何帮助。

4

2 回答 2

3

可能为时已晚,对最初的问题没有用处,但供将来参考,因为在找到如何使用 POS 将位图像发送到打印机之前,我一直在搜索自己。

在这几个选项中,似乎最简单的一个是使用“ ESC*0 ”命令,后跟字节数(2 个字节,高和低),实际数据,然后是“\n”。

如果您搜索“ESC * Select bit image”,该命令的所有详细信息/规格都在手册中,但是知道这个选项存在并且它相对简单和快速确实是一个棘手的问题......

您还可以在 Haskell 中找到一个具体的代码示例,并在这篇文章中找到更多详细信息。

于 2017-11-29T22:21:44.387 回答
2

一个问题似乎是标题被放置在数据之前。如果我阅读正确,您将发送:

ESC <density byte> <size data> <data ..>

因为 ESC 本身不是图像打印命令,所以您需要调整实现以匹配 ESC/POS 图像打印命令。我将假设您的实现接近完整,您可以访问已经描述这些命令的文档:

GS v 0
GS ( L
ESC *

要检查您的实现,您可以从escpos-phppython-escpos项目中移植一些单元测试,这两个项目都支持图像打印。

例如,通过GS v 0( source ) 打印单个黑色像素的语法是:

\x1d v 0 \x00 \x01 \x00 \x01 \x00 \x80
(non-printable ASCII characters shown here as hex codes)

而这些字节的含义是:

GS v 0 <density byte> <4 bytes image size data> <1 byte data>
于 2016-05-04T13:10:27.597 回答