2016-04-30 25 views
0

Ich habe einen Epson-TMH6000III Thermodrucker, und ich möchte einige Bitmap mit ESC/POS-Befehle drucken.Wie drucke ich Bilder mit ESC/POS Befehlen?

aber vorher möchte ich eine sehr einfache einzelne Zeile mit ESC/POS-Druckbildbefehle drucken.

hier ist mein Versuch:

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, 
    } 
} 

ich nicht das Ergebnis bekommen haben. Ich schätze für jede Hilfe in diesem.

Antwort

1

Ein Problem scheint der Header zu sein, der vor den Daten platziert wird. Wenn ich das richtig lese, die Sie senden:

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

Da ESC ist nicht selbst ein Bild Druckbefehl, müssen Sie Ihre Implementierung anpassen einen ESC/POS Bilddruckbefehl anzupassen. Ich werde von der nahen Vollständigkeit der Implementierung übernehmen, die Sie Zugriff auf die Dokumentation haben, die bereits diese Befehle beschreibt:

GS v 0 
GS (L 
ESC * 

Ihre Implementierung zu überprüfen, könnten Sie Port einige Unit-Tests aus den Projekten escpos-php oder python-escpos, die beide welche Bilddruck unterstützen.

Zum Beispiel kann die Syntax, um ein einzelnes schwarzes Pixel zu drucken über GS v 0 ist (source):

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

Und die Bedeutung dieses Bytes ist:

GS v 0 <density byte> <4 bytes image size data> <1 byte data> 
1

Wahrscheinlich zu spät, nützlich zu sein für die anfängliche Frage, aber für zukünftige Referenz, wie ich mich selbst ziemlich viel gesucht habe, bevor ich finde, wie man Bit-Bilder an einen Drucker sendet, der POS verwendet.

Unter den verschiedenen Optionen scheint es, dass die einfachste "ESC * 0" Befehl gefolgt von der Anzahl der Bytes (2 Bytes, hoch und niedrig), die tatsächlichen Daten und dann ein "\ n ".

Alle Details/Spezifikationen für den Befehl im Handbuch sind, wenn Sie für „ESC * Wählen Sie Bit-Bild“ suchen, aber zu wissen, dass diese Option vorhanden ist, und es ist relativ einfach und schnell ist wirklich tricky Bit ...

Sie finden auch ein konkretes Codebeispiel in Haskell und einige weitere Details unter this post.