Example #1
0
        private async Task PrintBitmap(Bitmap bimg, bool dither = true)
        {
            if (dither)
            {
                logger.Trace("Dithering input bitmap");
                bimg = Grayscale.CommonAlgorithms.Y.Apply(bimg);
                OrderedDithering f = new
                                     OrderedDithering(bayer4);
                bimg = f.Apply(bimg);
                logger.Debug("Dithered Bitmap");
            }
            bimg = CopyToBpp(bimg);
            logger.Debug("Converted Bitmap to 1-bit");
            int hSzImg = bimg.Height;

            byte[] iimg = new byte[hSzImg * mmj.Printer.LineWidth];
            byte[] img;
            using (MemoryStream s = new MemoryStream()) {
                bimg.Save(s, ImageFormat.Bmp);
                img = s.ToArray();
            }
            logger.Debug("Got bitmap's bytes");
            bimg.Dispose();
            logger.Debug("Disposed of Bitmap");
            int startoffset = img.Length - (hSzImg * mmj.Printer.LineWidth);

            logger.Debug("Processing bytes with offset " + startoffset);
            for (int h = 0; h < hSzImg; h++)
            {
                for (int w = 0; w < mmj.Printer.LineWidth; w++)
                {
                    iimg[(mmj.Printer.LineWidth * (hSzImg - 1 - h)) + (mmj.Printer.LineWidth - 1 - w)] = (byte)~
                                                                                                         img[startoffset + (mmj.Printer.LineWidth * h) + (mmj.Printer.LineWidth - 1 - w)];
                }
            }
            logger.Debug($"Have {img.Length} bytes of print data ({mmj.Printer.LineWidth * 8}x{hSzImg}@1bpp)");
            await mmj.PrintBytesAsync(iimg, false);
        }