Exemplo n.º 1
0
        public void Render(Image image, Drawable drawable, bool preview)
        {
            int size = GetValue <int>("size");

            image.UndoGroupStart();

            var procedure = new Procedure("plug_in_pixelize");

            procedure.Run(image, drawable, size);

            var palette = new MinisteckPalette();

            image.ConvertIndexed(ConvertDitherType.No, ConvertPaletteType.Custom,
                                 0, false, false, "Ministeck");
            palette.Delete();

            image.ConvertRgb();
            image.UndoGroupEnd();

            // And finally calculate the Ministeck pieces

            using (var painter = new Painter(drawable, size, GetValue <RGB>("color")))
            {
                Shape.Painter = painter;

                int width  = drawable.Width / size;
                int height = drawable.Height / size;

                var A = new BoolMatrix(width, height);

                // Fill in shapes
                bool limit  = GetValue <bool>("limit");
                var  shapes = new ShapeSet();
                shapes.Add((limit) ? 2 : 1, new TwoByTwoShape());
                shapes.Add((limit) ? 8 : 1, new ThreeByOneShape());
                shapes.Add((limit) ? 3 : 1, new TwoByOneShape());
                shapes.Add((limit) ? 2 : 1, new CornerShape());
                shapes.Add((limit) ? 1 : 1, new OneByOneShape());

                Action <int> update = null;
                if (!preview)
                {
                    var progress = new Progress(_("Ministeck..."));
                    update = y => progress.Update((double)y / height);
                }

                var generator =
                    new CoordinateGenerator(new Rectangle(0, 0, width, height), update);
                generator.ForEach(c => { if (!A.Get(c))
                                         {
                                             shapes.Fits(A, c);
                                         }
                                  });
            }

            drawable.Flush();
            drawable.Update();
        }
Exemplo n.º 2
0
        public bool Fits(Painter painter, BoolMatrix A, IntCoordinate p)
        {
            var color = painter.GetPixel(p);

            return(TrueForAll(offset =>
            {
                var c = new IntCoordinate(p.X + offset.X, p.Y + offset.Y);
                return A.IsInside(c) && !A.Get(c) && painter.IsSameColor(c, color);
            }));
        }
Exemplo n.º 3
0
        public void Render(Image image, Drawable drawable, bool preview)
        {
            int size = GetValue<int>("size");

              image.UndoGroupStart();

              var procedure = new Procedure("plug_in_pixelize");
              procedure.Run(image, drawable, size);

              var palette = new MinisteckPalette();
              image.ConvertIndexed(ConvertDitherType.No, ConvertPaletteType.Custom,
               0, false, false, "Ministeck");
              palette.Delete();

              image.ConvertRgb();
              image.UndoGroupEnd();

              // And finally calculate the Ministeck pieces

              using (var painter = new Painter(drawable, size, GetValue<RGB>("color")))
            {
              Shape.Painter = painter;

              int width = drawable.Width / size;
              int height = drawable.Height / size;

              var A = new BoolMatrix(width, height);

              // Fill in shapes
              bool limit = GetValue<bool>("limit");
              var shapes = new ShapeSet();
              shapes.Add((limit) ? 2 : 1, new TwoByTwoShape());
              shapes.Add((limit) ? 8 : 1, new ThreeByOneShape());
              shapes.Add((limit) ? 3 : 1, new TwoByOneShape());
              shapes.Add((limit) ? 2 : 1, new CornerShape());
              shapes.Add((limit) ? 1 : 1, new OneByOneShape());

              Action<int> update = null;
              if (!preview)
            {
              var progress = new Progress(_("Ministeck..."));
              update = y => progress.Update((double) y / height);
            }

              var generator =
            new CoordinateGenerator(new Rectangle(0, 0, width, height), update);
              generator.ForEach(c => {if (!A.Get(c)) shapes.Fits(A, c);});
            }

              drawable.Flush();
              drawable.Update();
        }