static void Main(string[] args)
        {
            // creamos un objeto PictureProvider y obtenemos una imagen
            PictureProvider p   = new PictureProvider();
            IPicture        pic = p.GetPicture("C:/Users/FIT/programacion2/ejercicio_en_clase/ComposicionYDelegacion/PII_Pipes_Filters-master/gato.png");

            // creamos un pipeNull
            IPipe pipenull = new PipeNull();

            // creamos instancias de todos los filtros que nos interecen
            FilterSave            filtersave            = new FilterSave("../../gato2.png");
            FilterTwitter         filtertwitter         = new FilterTwitter(filtersave.path);
            FilterNegative        filternegative        = new FilterNegative();
            FilterGreyscale       filtergreyscale       = new FilterGreyscale();
            ConditionalFilter     conditionalfilter     = new ConditionalFilter(filtersave.path);
            FilterBlurConvolution filterblurconvolution = new FilterBlurConvolution();

            // creamos instancias de todos los pipeSerial que vayamos a utilizar
            IPipe pipeserial7 = new PipeSerial(filtertwitter, pipenull);
            IPipe pipeserial6 = new PipeSerial(filtersave, pipeserial7);               // en este caso se sobrescribe la imagen guardada ya que estoy usando el mismo filtersave con el mismo path
            IPipe pipeserial5 = new PipeSerial(filterblurconvolution, pipeserial6);
            IPipe pipeserial4 = new PipeSerial(filtertwitter, pipenull);
            IPipe pipefork    = new PipeFork(conditionalfilter, pipeserial4, pipeserial5);
            IPipe pipeserial3 = new PipeSerial(filtersave, pipefork);
            IPipe pipeserial2 = new PipeSerial(filternegative, pipeserial3);
            IPipe pipeserial  = new PipeSerial(filtergreyscale, pipeserial2);

            // enviamos la imagen al primer pipeSerial
            pipeserial.Send(pic);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            PictureProvider provider = new PictureProvider();
            IPicture        picture  = provider.GetPicture("../../assets/yacht.jpg");

            IPipe   pipeNull          = new PipeNull();
            IFilter filterSavePicture = new FilterSavePicture();

            IFilter filterPublish   = new FilterPublishPicture();
            IPipe   thirdPipeSerial = new PipeSerial(filterPublish, pipeNull);

            IPipe secondPipeSerialSave = new PipeSerial(filterSavePicture, thirdPipeSerial);

            IFilter filterNegative   = new FilterNegative();
            IPipe   secondPipeSerial = new PipeSerial(filterNegative, secondPipeSerialSave);

            IPipe firstPipeSerialSave = new PipeSerial(filterSavePicture, secondPipeSerial);

            IFilter filterGreyScale = new FilterGreyscale();

            IPipe pipeConditional = new PipeConditionalBifurcation(thirdPipeSerial, secondPipeSerial);
            IPipe pipeSerial      = new PipeSerial(filterGreyScale, firstPipeSerialSave);

            IPicture newPicture = pipeSerial.Send(picture);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            PictureProvider p              = new PictureProvider();
            IPicture        pic            = p.GetPicture("../../Sequence-1.png");
            FilterGreyscale greyscale      = new FilterGreyscale();
            FilterNegative  filternegative = new FilterNegative();
            PipeNull        pipeNull       = new PipeNull();
            FilterSave      saveFilter     = new FilterSave();

            TwitterSave twitterSave = new TwitterSave();

            PipeSerial pipeserial3 = new PipeSerial(saveFilter, pipeNull);

            PipeSerial pipeserial4 = new PipeSerial(twitterSave, pipeNull);

            PipeFork pipeFork4 = new PipeFork(pipeNull, pipeserial4);

            PipeFork pipeFork3 = new PipeFork(pipeNull, pipeserial3);



            PipeSerial pipeserial2 = new PipeSerial(filternegative, pipeFork3);

            PipeFork pipeFork5 = new PipeFork(pipeserial2, pipeserial4);

            PipeFork pipeFork2 = new PipeFork(pipeFork5, pipeserial3);

            PipeSerial pipeSerial = new PipeSerial(greyscale, pipeFork2);

            PipeFork pipeFork1 = new PipeFork(pipeSerial, pipeserial3);



            pipeFork1.Send(pic);
        }
Exemple #4
0
        static void Main(string[] args)
        {
            PictureProvider p = new PictureProvider();

            IPicture pic = p.GetPicture("matrix.png");

            FilterGreyscale   filterGreyscale   = new FilterGreyscale();
            FilterNegative    filterNegative    = new FilterNegative();
            FilterPostTwitter filterPostTwitter = new FilterPostTwitter();

            PipeNull        pipeNull = new PipeNull();
            PipeConditional pipeSerialConditional = new PipeConditional(filterPostTwitter, filterNegative, pipeNull);

            pic = pipeSerialConditional.Send(pic);

            Persist(pic, "imagenFiltrada.jpg");
        }
        static void Main(string[] args)
        {
            PictureProvider p         = new PictureProvider();
            IPicture        pic       = p.GetPicture("..\\..\\ImagenPruebas.jpg");
            IFilter         filter    = new FilterGreyscale();
            IFilter         filterDos = new FilterNegative();
            IPipe           isnull    = new PipeNull();

            IPipe serialDos = new PipeSerial(filterDos, isnull);
            IPipe serial    = new PipeSerial(filter, serialDos);

            IPicture pic2 = serial.Send(pic);
            IPicture pic3 = serialDos.Send(pic2);

            p.SavePicture(pic2, "..\\..\\ImagenPruebas1.jpg");
            p.SavePicture(pic3, "..\\..\\ImagenPruebas2.jpg");
        }
Exemple #6
0
        static void Main(string[] args)
        {
            PictureProvider pictureProvider = new PictureProvider();
            IPicture        picOrig         = pictureProvider.GetPicture("jac.jpg");

            FilterNegative negative = new FilterNegative();
            //https://twitter.com/POOUCU?lang=en&lang=en
            FilterTwitterPublish twitterPublish = new FilterTwitterPublish();
            FilterCognitive      faceRecog      = new FilterCognitive();

            IConvolutionMatrix matrix    = new BlurConvolutionMatrix();
            FilterConvolution  blurConvo = new FilterConvolution(matrix);

            PipeNull pipeEnd = new PipeNull();
            //PipeSerial pipe32 = new PipeSerial(negative,pipeEnd);
            PipeSerial      pipe22 = new PipeSerial(negative, pipeEnd);
            PipeSerial      pipe21 = new PipeSerial(twitterPublish, pipeEnd);
            PipeConditional pipe1  = new PipeConditional(faceRecog, pipe21, pipe22);

            pictureProvider.SavePicture(pipe1.Send(picOrig), "jacFiltrado.jpg");
        }
Exemple #7
0
        static void Main(string[] args)
        {
            PictureProvider p   = new PictureProvider();
            IPicture        pic = p.GetPicture(@"./../../images/bill.jpg");

            var blur     = new FilterBlurConvolution();
            var grey     = new FilterGreyscale();
            var negative = new FilterNegative();
            var invento  = new FilterInvento();
            var saving   = FilterSave.Instance;
            var pipe1    = new PipeSerial(saving, new PipeNull());
            var pipe2    = new PipeSerial(grey, pipe1);
            var twitt    = new PipeSerial(new FilterTwitter(), pipe2);
            var pipe3    = new PipeSerial(saving, twitt);
            var pipe4    = new PipeSerial(negative, pipe3);

            pipe4.Send(pic);


            // var fork = new PipeFork(prueba2, prueba1);
        }
Exemple #8
0
        static void Main(string[] args)
        {
            PictureProvider imgProvider = new PictureProvider();
            IPicture        pictureProv = imgProvider.GetPicture("Vikings.jpg");

            IConvolution      matrix     = new BlurConvolutionMatriz();
            FilterConvolution blurFilter = new FilterConvolution(matrix);


            FilterNegative  negativeFilter  = new FilterNegative();
            FilterTwitter   twitterFilter   = new FilterTwitter();
            FilterCognitive faceRecognition = new FilterCognitive();


            PipeNull   pipeEnd      = new PipeNull();
            PipeSerial pipeTwitter  = new PipeSerial(twitterFilter, pipeEnd);
            PipeSerial pipeBlur     = new PipeSerial(blurFilter, pipeEnd);
            PipeSerial pipeNegative = new PipeSerial(negativeFilter, pipeEnd);

            PipeConditional pipeFace = new PipeConditional(faceRecognition, pipeTwitter, pipeNegative);

            imgProvider.SavePicture(pipeFace.Send(pictureProv), "Vikings.jpg");
        }
Exemple #9
0
        static void Main(string[] args)
        {
            // Se obtiene la imagen.
            PictureProvider p   = new PictureProvider();
            IPicture        pic = p.GetPicture(@"download.jpg");

            // Se crean los filtros que se van a utilizar.
            FilterGreyscale  filterGreyscale  = new FilterGreyscale();
            FilterNegative   filterNegative   = new FilterNegative();
            FilterSaveImage  filterSaveImage  = new FilterSaveImage();
            FilterTwitterApi filterTwitterApi = new FilterTwitterApi();
            FilterHasFace    filterHasFace    = new FilterHasFace();


            // Parte 1

            /*
             * PipeNull pipeNull = new PipeNull();
             * PipeSerial pipeFilterNegative = new PipeSerial(filterNegative, pipeNull);
             * PipeSerial pipeFilterGreyScale = new PipeSerial(filterGreyscale, pipeFilterNegative);
             * pipeFilterGreyScale.Send(pic);*/


            // Parte 2

            /*
             * PipeNull pipeNull = new PipeNull();
             * PipeSerial pipeFilterSaveImageTwo = new PipeSerial(filterSaveImage, pipeNull);
             * PipeSerial pipeFilterNegative = new PipeSerial(filterNegative, pipeFilterSaveImageTwo);
             * PipeSerial pipeFilterSaveImageOne = new PipeSerial(filterSaveImage, pipeFilterNegative);
             * PipeSerial pipeFilterGreyScale = new PipeSerial(filterGreyscale, pipeFilterSaveImageOne);
             * pipeFilterGreyScale.Send(pic);*/

            // Parte 3

            /*
             * PipeNull pipeNull = new PipeNull();
             * PipeSerial pipeTwitterApiTwo = new PipeSerial(filterTwitterApi, pipeNull);
             * PipeSerial pipeFilterSaveImageTwo = new PipeSerial(filterSaveImage, pipeTwitterApiTwo);
             * PipeSerial pipeFilterNegative = new PipeSerial(filterNegative, pipeFilterSaveImageTwo);
             * PipeSerial pipeTwitterApi = new PipeSerial(filterTwitterApi, pipeFilterNegative);
             * PipeSerial pipeFilterSaveImageOne = new PipeSerial(filterSaveImage, pipeTwitterApi);
             * PipeSerial pipeFilterGreyScale = new PipeSerial(filterGreyscale, pipeFilterSaveImageOne);
             * pipeFilterGreyScale.Send(pic);*/


            // Parte 4.

            /*
             * PipeNull pipeNull = new PipeNull();
             * PipeSerial pipeFilterSaveImageTwo = new PipeSerial(filterSaveImage, pipeNull);
             * PipeSerial pipeFilterNegative = new PipeSerial(filterNegative, pipeFilterSaveImageTwo);
             * PipeSerial pipeTwitterApi = new PipeSerial(filterTwitterApi, pipeNull);
             * PipeFork pipeConditionalFork = new PipeFork(pipeFilterNegative, pipeTwitterApi);
             * PipeSerial pipeFilterHasFace = new PipeSerial(filterHasFace, pipeConditionalFork);
             * PipeSerial pipeFilterSaveImageOne = new PipeSerial(filterSaveImage, pipeFilterHasFace);
             * PipeSerial pipeFilterGreyScale = new PipeSerial(filterGreyscale, pipeFilterSaveImageOne);
             * pipeFilterGreyScale.Send(pic);*/



            pic = p.GetPicture(@"Imagen2.jpg");

            //Filtro FilterBlackAndWhite
            PipeNull         pipeNull             = new PipeNull();
            FilterSaveImage2 filterSaveImage2     = new FilterSaveImage2();
            PipeSerial       pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterBlackAndWhite filterBAndW     = new FilterBlackAndWhite(20);
            PipeSerial          pipeFilterBAndW = new PipeSerial(filterBAndW, pipeFilterSaveImage2);

            pipeFilterBAndW.Send(pic.Clone());

            //Filtro FilterClearOut
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterClearOut filterClearOut     = new FilterClearOut();
            PipeSerial     pipeFilterClearOut = new PipeSerial(filterClearOut, pipeFilterSaveImage2);

            pipeFilterClearOut.Send(pic.Clone());

            //Filtro FilterColoredLines
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterColoredLines filterColoredLines     = new FilterColoredLines();
            PipeSerial         pipeFilterColoredLines = new PipeSerial(filterColoredLines, pipeFilterSaveImage2);

            pipeFilterColoredLines.Send(pic.Clone());


            //Filtro FilterDarken
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterDarken filterDarken     = new FilterDarken();
            PipeSerial   pipeFilterDarken = new PipeSerial(filterDarken, pipeFilterSaveImage2);

            pipeFilterDarken.Send(pic.Clone());

            //Filtro FilterNeon
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterNeon filterNeon     = new FilterNeon();
            PipeSerial pipeFilterNeon = new PipeSerial(filterNeon, pipeFilterSaveImage2);

            pipeFilterNeon.Send(pic.Clone());

            //Filtro FilterPencil
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterPencil filterPencil     = new FilterPencil();
            PipeSerial   pipeFilterPencil = new PipeSerial(filterPencil, pipeFilterSaveImage2);

            pipeFilterPencil.Send(pic.Clone());

            //Filtro FilterRelief
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterRelief filterRelief     = new FilterRelief();
            PipeSerial   pipeFilterRelief = new PipeSerial(filterRelief, pipeFilterSaveImage2);

            pipeFilterRelief.Send(pic.Clone());


            //Filtro FilterGreyScale
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterGreyscale filterGreyScale     = new FilterGreyscale();
            PipeSerial      pipeFilterGreyscale = new PipeSerial(filterGreyScale, pipeFilterSaveImage2);

            pipeFilterGreyscale.Send(pic.Clone());


            //Filtro BlurConvolution
            pipeNull             = new PipeNull();
            pipeFilterSaveImage2 = new PipeSerial(filterSaveImage2, pipeNull);

            FilterBlurConvolution filterBlurConvolution     = new FilterBlurConvolution();
            PipeSerial            pipeFilterBlurConvolution = new PipeSerial(filterBlurConvolution, pipeFilterSaveImage2);

            pipeFilterBlurConvolution.Send(pic.Clone());
        }
Exemple #10
0
        static void Main(string[] args)
        {
            PictureProvider p   = new PictureProvider();
            IPicture        pic = p.GetPicture("../faceImage.jpg");

            IFilter filterGreyscale          = new FilterGreyscale();
            IFilter filterNegative           = new FilterNegative();
            IFilter filterProvider           = new FilterProvider();
            IFilter filterTwiter             = new FilterTwitter();
            IFilter filterConditional        = new FilterConditional();
            IFilter filterBlurConvolution    = new FilterBlurConvolution();
            IFilter filterSharpenConvolution = new FilterSharpenConvolution();

            //EJERCICIO 1

            IPipe pipeNull_ej1    = new PipeNull();
            IPipe pipeSerial2_ej1 = new PipeSerial(filterNegative, pipeNull_ej1);
            IPipe pipeSerial1_ej1 = new PipeSerial(filterGreyscale, pipeSerial2_ej1);

            pipeSerial1_ej1.Send(pic);

            //EJERCICIO 2

            IPipe pipeNull_ej2      = new PipeNull();
            IPipe pipeProvider2_ej2 = new PipeSerial(filterProvider, pipeNull_ej2);
            IPipe pipeSerial2_ej2   = new PipeSerial(filterNegative, pipeProvider2_ej2);
            IPipe pipeProvider1_ej2 = new PipeSerial(filterProvider, pipeSerial2_ej2);
            IPipe pipeSerial1_ej2   = new PipeSerial(filterGreyscale, pipeProvider1_ej2);

            pipeSerial1_ej2.Send(pic);


            //EJERCICIO 3

            IPipe pipeNull_ej3      = new PipeNull();
            IPipe pipeTwiter2_ej3   = new PipeSerial(filterTwiter, pipeNull_ej3);
            IPipe pipeProvider2_ej3 = new PipeSerial(filterProvider, pipeTwiter2_ej3);
            IPipe pipeSerial2_ej3   = new PipeSerial(filterNegative, pipeProvider2_ej3);
            IPipe pipeTwiter1_ej3   = new PipeSerial(filterTwiter, pipeSerial2_ej3);
            IPipe pipeProvider1_ej3 = new PipeSerial(filterProvider, pipeTwiter1_ej3);
            IPipe pipeSerial1_ej3   = new PipeSerial(filterGreyscale, pipeProvider1_ej3);

            pipeSerial1_ej3.Send(pic);


            //EJERCICIO 4

            IPipe pipeNull_ej4             = new PipeNull();
            IPipe pipeProvider2_ej4        = new PipeSerial(filterProvider, pipeNull_ej4);
            IPipe pipeSerial2_ej4          = new PipeSerial(filterNegative, pipeProvider2_ej4);
            IPipe pipeTwiter1_ej4          = new PipeSerial(filterTwiter, pipeNull_ej4);
            IPipe pipeConditionalFork1_ej4 = new PipeConditionalFork(filterConditional, pipeTwiter1_ej4, pipeSerial2_ej4);
            IPipe pipeProvider1_ej4        = new PipeSerial(filterProvider, pipeConditionalFork1_ej4);
            IPipe pipeSerial1_ej4          = new PipeSerial(filterGreyscale, pipeProvider1_ej4);

            pipeSerial1_ej4.Send(pic);


            //EJERCICIO BONUS

            IPipe pipeNull_ejB      = new PipeNull();
            IPipe pipeProvider2_ejB = new PipeSerial(filterProvider, pipeNull_ejB);
            IPipe pipeSerial2_ejB   = new PipeSerial(filterSharpenConvolution, pipeProvider2_ejB);
            IPipe pipeProvider1_ejB = new PipeSerial(filterProvider, pipeSerial2_ejB);
            IPipe pipeSerial1_ejB   = new PipeSerial(filterBlurConvolution, pipeProvider1_ejB);

            pipeSerial1_ejB.Send(pic);
        }
        static void Main(string[] args)
        {
            string          Shrek     = @"..\..\SmilingShrek.jpg";
            string          NewShrek  = @"..\..\" + Guid.NewGuid().ToString() + ".jpg";
            string          NewShrek2 = @"..\..\" + Guid.NewGuid().ToString() + ".jpg";
            string          NewShrek3 = @"..\..\" + Guid.NewGuid().ToString() + ".jpg";
            string          NewShrek4 = @"..\..\" + Guid.NewGuid().ToString() + ".jpg";
            PictureProvider p         = new PictureProvider();
            IPicture        pic       = p.GetPicture(Shrek);

            // Conjunto de filtros a utilizar en las 5 partes
            IFilter               GrayFilter     = new FilterGreyscale();
            IFilter               NegativeFilter = new FilterNegative();
            IFilter               Save           = new FilterSaver(NewShrek);
            IFilter               Tweet1         = new FilterTwitterPublish("Shrek is love, Shrek is life.", NewShrek);
            IFilter               Tweet2         = new FilterTwitterPublish("Shrek is love, Shrek is life.", NewShrek2);
            IFilter               Tweet3         = new FilterTwitterPublish("Shrek is love, Shrek is life.", NewShrek3);
            IFilter               Tweet4         = new FilterTwitterPublish("Shrek is love, Shrek is life.", NewShrek4);
            IConditionFilter      FaceCondition  = new FilterSearchFace(Shrek);
            FilterBlurConvolution LightBlur      = new FilterBlurConvolution();

            //PipeNull
            IPipe NullPipe = new PipeNull();

            // Parte1
            PipeSerial pipe2 = new PipeSerial(NegativeFilter, NullPipe);
            IPipe      pipe1 = new PipeSerial(GrayFilter, pipe2);

            pipe1.Send(pic);

            // Parte 2 (guardar una copia de la imagen cada vez que se le aplica un filtro)
            IPipe FourthPipe2 = new PipeSerial(Save, NullPipe);
            IPipe ThirdPipe2  = new PipeSerial(NegativeFilter, FourthPipe2);
            IPipe SecondPipe2 = new PipeSerial(Save, ThirdPipe2);

            IPipe InitialPipe2 = new PipeSerial(GrayFilter, SecondPipe2);

            InitialPipe2.Send(pic);

            // Parte 3
            IPipe FifthPipe3  = new PipeSerial(Tweet2, NullPipe);
            IPipe FourthPipe3 = new PipeSerial(Save, FifthPipe3);
            IPipe ThirdPipe3  = new PipeSerial(NegativeFilter, FourthPipe3);
            IPipe SecondPipe3 = new PipeSerial(Save, ThirdPipe3);

            IPipe InitialPipe3 = new PipeSerial(GrayFilter, SecondPipe3);

            InitialPipe3.Send(pic);

            // Parte 4
            IPipe SerialTweet4 = new PipeSerial(Tweet3, NullPipe);
            IPipe SerialSave   = new PipeSerial(Save, NullPipe);
            IPipe PipeFork4    = new PipeFork(SerialTweet4, SerialSave, FaceCondition.condition);

            IPipe InitialPipe4 = new PipeSerial(GrayFilter, PipeFork4);

            InitialPipe4.Send(pic);

            // Parte 5
            IPipe ThirdPipe5  = new PipeSerial(Tweet4, NullPipe);
            IPipe SecondPipe5 = new PipeSerial(Save, ThirdPipe5);

            IPipe InitialPipe5 = new PipeSerial(LightBlur, SecondPipe5);

            InitialPipe5.Send(pic);
        }
Exemple #12
0
        static void Main(string[] args)
        {
            IFilter         Greyscale = new FilterGreyscale();
            IFilter         Negative  = new FilterNegative();
            IFilter         Twitter   = new FilterTwitter();
            IFilter         Save      = new FilterSave();
            IFilter         Sharpen   = new FilterSharpenConvolution();
            IFilterBool     HasFace   = new FilterFace();
            PictureProvider p         = new PictureProvider();
            IPicture        pic       = p.GetPicture("..\\Images\\image.jpg");

            /// <summary>
            /// Las clases Pipe que aplican algún filtro a la imagen delegan la responsabilidad de modificar
            /// la imagen a la clase Filter que la compone.
            /// </summary>
            /// <returns></returns>

            #region Ejercicio 1

            IPipe Pipe1_3 = new PipeNull();
            IPipe Pipe1_2 = new PipeSerial(Negative, Pipe1_3);
            IPipe Pipe1_1 = new PipeSerial(Greyscale, Pipe1_2);
            Pipe1_1.Send(pic);

            #endregion

            #region Ejercicio 2

            IPipe Pipe2_5 = new PipeNull();
            IPipe Pipe2_4 = new PipeSerial(Save, Pipe2_5);
            IPipe Pipe2_3 = new PipeSerial(Negative, Pipe2_4);
            IPipe Pipe2_2 = new PipeSerial(Save, Pipe2_3);
            IPipe Pipe2_1 = new PipeSerial(Greyscale, Pipe2_2);
            Pipe2_1.Send(pic);

            #endregion

            #region Ejercicio 3

            IPipe Pipe3_5 = new PipeNull();
            IPipe Pipe3_4 = new PipeSerial(Twitter, Pipe2_5);
            IPipe Pipe3_3 = new PipeSerial(Negative, Pipe2_4);
            IPipe Pipe3_2 = new PipeSerial(Twitter, Pipe2_3);
            IPipe Pipe3_1 = new PipeSerial(Greyscale, Pipe2_2);
            Pipe3_1.Send(pic);

            #endregion

            #region Ejercicio 4

            IPipe Pipe4_5 = new PipeNull();
            IPipe Pipe4_4 = new PipeSerial(Negative, Pipe4_5);
            IPipe Pipe4_3 = new PipeSerial(Twitter, Pipe4_5);
            IPipe Pipe4_2 = new PipeConditionalFork(Pipe4_3, Pipe4_4, HasFace);
            IPipe Pipe4_1 = new PipeSerial(Greyscale, Pipe4_2);
            Pipe4_1.Send(pic);

            #endregion

            #region Ejercicio Bonus

            IPipe PipeBonus_3 = new PipeNull();
            IPipe PipeBonus_2 = new PipeSerial(Save, PipeBonus_3);
            IPipe PipeBonus_1 = new PipeSerial(Sharpen, PipeBonus_2);
            PipeBonus_1.Send(pic);

            #endregion
        }