Ejemplo n.º 1
0
        public virtual void Encode(IRgb24BitmapBase bitmap, Stream stream)
        {
            if (bitmap == null)
            {
                throw new ArgumentNullException(nameof(bitmap));
            }
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            WriteHeader(stream);

            var context = new GifEncodingContext(bitmap, stream);

            context.Data   = bitmap.GetPixels();
            context.Colors = context.Data.Distinct().ToArray();

            WriteLogicalScreenDescriptor(context);

            // Global color map
            WriteColorTable(context);

            WriteImageDescriptor(context);

            // Local color table: empty

            WriteImageData(context);

            // Trailer
            stream.WriteByte(0x3B);
        }
Ejemplo n.º 2
0
        public override IImage Create(string data, IRgb24BitmapBase image, IRgb24BitmapBase imageText)
        {
            var bitmap = image as IRgb24Bitmap;

            if (bitmap?.FrameCount > 1)
            {
                var bitMatrix   = QRCodeEncoder.Build(data);
                int moduleCount = bitMatrix.Size;
                var images      = Enumerable.Range(0, bitmap.FrameCount).Select(i =>
                {
                    var imgBitMatrix = Binarizer.Binarize(image, moduleCount * 3, moduleCount * 3);
                    //var imgColorMatrix = Colorizer.Colorize(image, moduleCount * 3, moduleCount * 3);
                    var imgColorMatrix = new ColorSquare(moduleCount * 3);
                    var imgMatrix      = Binarizer.Binarize(bitmap.GetFrame(i), moduleCount * 3, moduleCount * 3);
                    var frameMatrix    = Merger.Merge(bitMatrix, QRCodeEncoder.TypeNumber, imgBitMatrix);
                    return(BitMatrixDrawer.Draw(frameMatrix, imgColorMatrix));
                }).ToList();

                if (FrameMerger == null)
                {
                    return(images[0]);
                }

                var frames = images.Select(img => img as IRgb24BitmapFrame).ToList();
                if (frames.Contains(null))
                {
                    return(images[0]);
                }
                return(FrameMerger(frames));
            }
            else
            {
                return(base.Create(data, image, imageText));
            }
        }
Ejemplo n.º 3
0
 private static bool CheckImagePath(string imagePath, out IRgb24BitmapBase bitmap)
 {
     if (imagePath == null)
     {
         bitmap = null;
         return(true);
     }
     if (!File.Exists(imagePath))
     {
         LogError("File not found.");
         bitmap = null;
         return(false);
     }
     try
     {
         var bmp = Bitmap.FromFile(imagePath) as Bitmap;
         bitmap = new BitmapFrame(bmp);
         return(true);
     }
     catch (Exception ex)
     {
         LogError(ex.Message);
         bitmap = null;
         return(false);
     }
 }
Ejemplo n.º 4
0
        public virtual IImage Create(string data, IRgb24BitmapBase image)
        {
            var bitMatrix = QRCodeEncoder.Build(data);

            if (image != null)
            {
                int moduleCount = bitMatrix.Size;
                var imgMatrix   = Binarizer.Binarize(image, moduleCount * 3, moduleCount * 3);
                bitMatrix = Merger.Merge(bitMatrix, QRCodeEncoder.TypeNumber, imgMatrix);
            }
            return(BitMatrixDrawer.Draw(bitMatrix));
        }
Ejemplo n.º 5
0
        public override void Encode(IRgb24BitmapBase bitmap, Stream stream)
        {
            if (bitmap == null)
            {
                throw new ArgumentNullException(nameof(bitmap));
            }
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            WriteHeader(stream);

            var context = new GifEncodingContext(bitmap, stream);
            var bmp     = bitmap as IRgb24Bitmap;

            if (bmp != null && bmp.FrameCount > 1)
            {
                context.Colors = Enumerable.Range(0, bmp.FrameCount)
                                 .Select(i => bmp.GetFrame(i).GetPixels())
                                 .SelectMany(l => l)
                                 .Distinct()
                                 .ToArray();

                WriteLogicalScreenDescriptor(context);
                WriteColorTable(context);
                WriteApplicationExtensionBlock(context);
                WriteGraphicsControlExtension(context);

                for (var i = 0; i < bmp.FrameCount; i++)
                {
                    var frame    = bmp.GetFrame(i);
                    var fContext = new GifEncodingContext(frame, stream);
                    fContext.Data   = frame.GetPixels();
                    fContext.Colors = context.Colors;

                    WriteImageDescriptor(fContext);
                    WriteImageData(fContext);
                }
            }
            else
            {
                context.Data   = bitmap.GetPixels();
                context.Colors = context.Data.Distinct().ToArray();
                WriteLogicalScreenDescriptor(context);
                WriteColorTable(context);
                WriteImageDescriptor(context);
                WriteImageData(context);
            }

            // Trailer
            stream.WriteByte(0x3B);
        }
Ejemplo n.º 6
0
        private static bool CheckImagePath(string imagePath, out IRgb24BitmapBase bitmap, out IRgb24BitmapBase bitmapText)
        {
            bitmapText = null;
            if (imagePath == null)
            {
                bitmap = null;
                return(true);
            }
            if (!File.Exists(imagePath))
            {
                LogError("File not found.");
                bitmap = null;
                return(false);
            }
            try
            {
                Bitmap bmpp = (Bitmap) new Bitmap(500, 500);
                using (Graphics graph = Graphics.FromImage(bmpp))
                {
                    Rectangle ImageSize = new Rectangle(0, 0, 500, 500);
                    graph.FillRectangle(Brushes.White, ImageSize);
                    graph.SmoothingMode     = SmoothingMode.AntiAlias;
                    graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graph.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                    graph.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                    StringFormat format = new StringFormat()
                    {
                        Alignment     = StringAlignment.Center,
                        LineAlignment = StringAlignment.Center
                    };
                    RectangleF rectf = new RectangleF(10, 10, 480, 480);
                    graph.DrawString("Text", new Font("Tahoma", 40), Brushes.Black, rectf, format);
                }
                bitmapText = new BitmapFrame(bmpp);


                var bmp = Bitmap.FromFile(imagePath) as Bitmap;
                bitmap = new BitmapFrame(bmp);
                return(true);
            }
            catch (Exception ex)
            {
                LogError(ex.Message);
                bitmap = null;
                return(false);
            }
        }
Ejemplo n.º 7
0
        public ColorMatrix Colorize(IRgb24BitmapBase bitmap, int rowCount, int columnCount)
        {
            if (bitmap == null)
            {
                throw new ArgumentNullException(nameof(bitmap));
            }
            var colorMatrix = new ColorMatrix(rowCount * 3, columnCount * 3);

            int[,] rgb24s = Sample(bitmap, rowCount * 3, columnCount * 3);
            for (int i = 0; i < rgb24s.GetLength(0); i++)
            {
                for (int j = 0; j < rgb24s.GetLength(1); j++)
                {
                    colorMatrix[i, j] = rgb24s[i, j];
                }
            }
            return(colorMatrix);
        }
Ejemplo n.º 8
0
        private int[,] Sample(IRgb24BitmapBase bitmap, int rowCount, int columnCount)
        {
            float height       = Convert.ToSingle(bitmap.Height);
            float width        = Convert.ToSingle(bitmap.Width);
            float rowLength    = Convert.ToSingle(rowCount);
            float columnLength = Convert.ToSingle(columnCount);

            int[,] rgb24s = new int[rowCount, columnCount];
            for (int i = 0; i < columnCount; i++)
            {
                for (int j = 0; j < rowCount; j++)
                {
                    int x     = Convert.ToInt32(width / columnLength * i);
                    int y     = Convert.ToInt32(height / rowLength * j);
                    int color = bitmap.GetPixel(x, y);
                    rgb24s[j, i] = color;
                }
            }
            return(rgb24s);
        }
Ejemplo n.º 9
0
        public BitMatrix Binarize(IRgb24BitmapBase bitmap, int rowCount, int columnCount)
        {
            if (bitmap == null)
            {
                throw new ArgumentNullException(nameof(bitmap));
            }
            var bitMatrix = new BitMatrix(rowCount, columnCount);

            int[,] rgb24s = Sample(bitmap, rowCount, columnCount);
            int[,] grays  = ToGrays(rgb24s);
            int[] histGram = GetHistGram(grays);
            int   threhold = GetThreshold(histGram);

            for (int i = 0; i < grays.GetLength(0); i++)
            {
                for (int j = 0; j < grays.GetLength(1); j++)
                {
                    bitMatrix[i, j] = grays[i, j] < threhold;
                }
            }
            return(bitMatrix);
        }
Ejemplo n.º 10
0
        public virtual IImage Create(string data, IRgb24BitmapBase image, IRgb24BitmapBase imageText)
        {
            var bitMatrix = QRCodeEncoder.Build(data); //~20 ms



            if (image != null && 2 == 3) //qr code
            {
                int moduleCount    = bitMatrix.Size;
                var imgBitMatrix   = Binarizer.Binarize(image, moduleCount * 3, moduleCount * 3);
                var imgColorMatrix = Colorizer.Colorize(image, moduleCount * 3, moduleCount * 3);
                //var imgColorMatrix = new ColorSquare(moduleCount * 3);
                bitMatrix = Merger.Merge(bitMatrix, QRCodeEncoder.TypeNumber, imgBitMatrix);
                return(BitMatrixDrawer.Draw(bitMatrix, imgColorMatrix));
            }
            else if (image != null) //text on image
            {
                int moduleCount    = bitMatrix.Size;
                var imgColorMatrix = Colorizer.Colorize(image, moduleCount * 3, moduleCount * 3);
                var tripMatrix     = new TripSquare(500);

                for (var i = 0; i < 500; i++)
                {
                    for (var ii = 0; ii < 500; ii++)
                    {
                        tripMatrix[i, ii] = 0;
                    }
                }//~20 ms since else if



                Stopwatch stopWatch = new Stopwatch();
                stopWatch.Start();

                for (var i = 5; i < 495; i++)
                {
                    for (var ii = 5; ii < 495; ii++)
                    {
                        if (imageText.GetPixel(i, ii) < 12000000)
                        {
                            tripMatrix[ii, i] = 1;
                        }
                        if (imageText.GetPixel(i, ii) < 8000000)
                        {
                            tripMatrix[ii, i] = 2;
                        }
                        if (imageText.GetPixel(i, ii) < 4000000)
                        {
                            tripMatrix[ii, i] = 3;
                        }
                    }
                }//~110 ms for this double loop



                for (var i = 10; i < 500 - 10; i++)
                {
                    for (var ii = 10; ii < 500 - 10; ii++)
                    {
                        /*
                         * if (tripMatrix[i,ii] == 0){
                         *      var minDist = 999;
                         *      for (var iii=i-10;iii<i+11;iii++){
                         *                              for (var iiii=ii-10;iiii<ii+11;iiii++){
                         *                                      if (tripMatrix[iii,iiii] > 0){
                         *                                              var d = (i-iii)*(i-iii)+(ii-iiii)*(ii-iiii);
                         *                                              if (d< minDist){
                         *                                                      minDist = d;
                         *                                              }
                         *                                      }
                         *                              }
                         *                      }
                         *                      if (minDist < 51){
                         *                              tripMatrix[i,ii] = (2*minDist-150)/5;
                         *                      }
                         * }
                         */

                        if (tripMatrix[i, ii] > 0)
                        {
                            for (var iii = i - 10; iii < i + 11; iii++)
                            {
                                for (var iiii = ii - 10; iiii < ii + 11; iiii++)
                                {
                                    if (tripMatrix[iii, iiii] == 0)
                                    {
                                        var d = (i - iii) * (i - iii) + (ii - iiii) * (ii - iiii);
                                        if (d < 51)
                                        {
                                            tripMatrix[iii, iiii] = (2 * d - 150) / 5;
                                        }
                                    }
                                    else if (tripMatrix[iii, iiii] < 0)
                                    {
                                        var d = (i - iii) * (i - iii) + (ii - iiii) * (ii - iiii);
                                        if (d < 51)
                                        {
                                            var dd = (2 * d - 150) / 5;
                                            if (dd < tripMatrix[iii, iiii])
                                            {
                                                tripMatrix[iii, iiii] = dd;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                stopWatch.Stop();
                // Get the elapsed time as a TimeSpan value.
                TimeSpan ts = stopWatch.Elapsed;

                // Format and display the TimeSpan value.
                string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                                   ts.Hours, ts.Minutes, ts.Seconds,
                                                   ts.Milliseconds / 10);
                Console.WriteLine("QRArtCreatorTime " + elapsedTime);


                return(TripMatrixDrawer.Draw(tripMatrix, imgColorMatrix));
            }
            else
            {
                Console.Out.WriteLine("no image");
                var imgMatrix = new ColorSquare(bitMatrix.Size * 3);
                return(BitMatrixDrawer.Draw(bitMatrix, imgMatrix));
            }
        }
Ejemplo n.º 11
0
 public GifEncodingContext(IRgb24BitmapBase bitmap, Stream stream)
 {
     Bitmap = bitmap;
     Stream = stream;
 }
Ejemplo n.º 12
0
 public static void Save(this IRgb24BitmapBase bitmap, Stream stream, IRgb24BitmapEncoder encoder)
 {
     encoder.Encode(bitmap, stream);
 }