public override ZplElementBase Analyze(string zplCommand) { var storageDevice = zplCommand[this.PrinterCommandPrefix.Length]; var zplDataParts = this.SplitCommand(zplCommand, 2); var imageName = zplDataParts[0]; _ = int.TryParse(zplDataParts[1], out var totalNumberOfBytesInGraphic); _ = int.TryParse(zplDataParts[2], out var numberOfBytesPerRow); //third comma is the start of the image data var indexOfThirdComma = this.IndexOfNthCharacter(zplCommand, 3, ','); var dataHex = zplCommand.Substring(indexOfThirdComma + 1); var grfImageData = ByteHelper.HexToBytes(dataHex); if (grfImageData.Length != totalNumberOfBytesInGraphic) { dataHex = ZebraHexCompressionHelper.Uncompress(dataHex, numberOfBytesPerRow); grfImageData = ByteHelper.HexToBytes(dataHex); } var converter = new ImageSharpImageConverter(); var imageData = converter.ConvertImage(grfImageData, numberOfBytesPerRow); this._printerStorage.AddFile(storageDevice, imageName, imageData); return(null); }
///<inheritdoc/> public override IEnumerable <string> Render(ZplRenderOptions context) { byte[] objectData; using (var image = Image.Load(ImageData)) { if (context.ScaleFactor != 1) { var scaleWidth = (int)Math.Round(image.Width * context.ScaleFactor); var scaleHeight = (int)Math.Round(image.Height * context.ScaleFactor); image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); } using (var ms = new MemoryStream()) { image.Save(ms, new PngEncoder()); objectData = ms.ToArray(); } } var imageResult = _imageConverter.ConvertImage(objectData); if (_isCompressionActive) { imageResult.ZplData = ZebraHexCompressionHelper.Compress(imageResult.ZplData, imageResult.BytesPerRow); } return(new List <string> { $"~DG{StorageDevice}:{ImageName}.{_extension},{imageResult.BinaryByteCount},{imageResult.BytesPerRow},", imageResult.ZplData }); }
public void Uncompress_ValidData2_Successful() { var compressedData = "gO0GE\n"; var uncompressed = ZebraHexCompressionHelper.Uncompress(compressedData, 10); Assert.AreEqual("00000000000000000000000000000E\n", uncompressed); }
public void CompressUncompress_Flow_Successful() { var originalData = "FFFFFFFFFFFFFFFFFFFF\n8000FFFF0000FFFF0001\n8000FFFF0000FFFF0001\n8000FFFF0000FFFF0001\nFFFF0000FFFF0000FFFF\nFFFF0000FFFF0000FFFF\nFFFF0000FFFF0000FFFF\nFFFFFFFFFFFFFFFFFFFF\n"; var compressed = ZebraHexCompressionHelper.Compress(originalData, 10); var uncompressed = ZebraHexCompressionHelper.Uncompress(compressed, 10); Assert.AreEqual(originalData, uncompressed); }
public void Compress_ValidData2_Successful() { var compressed = ZebraHexCompressionHelper.Compress("FFFFF00FFFFF", 2); Assert.AreEqual("JFGFH0GFJF", compressed); //^XA //~DGR:SAMPLE.GRF,00006,02,JFGFH0GFJF //^FO20,20 //^XGR:SAMPLE.GRF,1,1^FS //^XZ }
public void Compress_ValidData3_Successful() { var compressed = ZebraHexCompressionHelper.Compress("FFFFFFFFFFFFFFFFFFFF\n8000FFFF0000FFFF0001\n8000FFFF0000FFFF0001\n8000FFFF0000FFFF0001\nFFFF0000FFFF0000FFFF\nFFFF0000FFFF0000FFFF\nFFFF0000FFFF0000FFFF\nFFFFFFFFFFFFFFFFFFFF\n", 10); Assert.AreEqual("gFG8I0JFJ0JFI0!::JFJ0JFJ0JF::gF", compressed); //^XA //~DGR:SAMPLE.GRF,00080,010,gFG8I0JFJ0JFI0!::JFJ0JFJ0JF::gF //^FO20,20 //^XGR:SAMPLE.GRF,1,1 ^ FS //^XZ }
public override ZplElementBase Analyze(string zplCommand) { var x = 0; var y = 0; var bottomToTop = false; if (this.VirtualPrinter.NextElementPosition != null) { x = this.VirtualPrinter.NextElementPosition.X; y = this.VirtualPrinter.NextElementPosition.Y; bottomToTop = this.VirtualPrinter.NextElementPosition.CalculateFromBottom; } var zplDataParts = this.SplitCommand(zplCommand); var compressionType = zplDataParts[0][0]; var binaryByteCount = 0; var graphicFieldCount = 0; var bytesPerRow = 0; if (zplDataParts.Length > 1) { _ = int.TryParse(zplDataParts[1], out binaryByteCount); } if (zplDataParts.Length > 2) { _ = int.TryParse(zplDataParts[2], out graphicFieldCount); } if (zplDataParts.Length > 3) { _ = int.TryParse(zplDataParts[3], out bytesPerRow); } //fourth comma is the start of the image data var indexOfFourthComma = this.IndexOfNthCharacter(zplCommand, 4, ','); var dataHex = zplCommand.Substring(indexOfFourthComma + 1); if (dataHex.Length != binaryByteCount * 2) { dataHex = ZebraHexCompressionHelper.Uncompress(dataHex, bytesPerRow); } var grfImageData = ByteHelper.HexToBytes(dataHex); var converter = new ImageSharpImageConverter(); var imageData = converter.ConvertImage(grfImageData, bytesPerRow); dataHex = ByteHelper.BytesToHex(imageData); return(new ZplGraphicField(x, y, binaryByteCount, graphicFieldCount, bytesPerRow, dataHex, bottomToTop: bottomToTop, compressionType)); }
public void GetZebraCharCount_Complex_Successful(int charRepeatCount, string compressed) { var zebraCharCount = ZebraHexCompressionHelper.GetZebraCharCount(charRepeatCount); Assert.AreEqual(compressed, zebraCharCount); }