예제 #1
0
        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);
        }
예제 #2
0
        ///<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
            });
        }
예제 #3
0
        public void Uncompress_ValidData2_Successful()
        {
            var compressedData = "gO0GE\n";

            var uncompressed = ZebraHexCompressionHelper.Uncompress(compressedData, 10);

            Assert.AreEqual("00000000000000000000000000000E\n", uncompressed);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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
        }
예제 #6
0
        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
        }
예제 #7
0
        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));
        }
예제 #8
0
        public void GetZebraCharCount_Complex_Successful(int charRepeatCount, string compressed)
        {
            var zebraCharCount = ZebraHexCompressionHelper.GetZebraCharCount(charRepeatCount);

            Assert.AreEqual(compressed, zebraCharCount);
        }