Esempio n. 1
0
        public void TestBrightnessContrastSaturation()
        {
            System.Drawing.Bitmap image = new System.Drawing.Bitmap("..\\..\\..\\..\\resources\\papagei.png");
            YuvKA.VideoModel.Size size  = new YuvKA.VideoModel.Size(image.Width, image.Height);
            Frame[] inputFrames         = { new Frame(size) };
            BrightnessContrastSaturationNode bcsNode = new BrightnessContrastSaturationNode();

            // Copy RGB content to the input frame
            for (int y = 0; y < size.Height; y++)
            {
                for (int x = 0; x < size.Width; ++x)
                {
                    inputFrames[0][x, y] = new Rgb(image.GetPixel(x, y).R,
                                                   image.GetPixel(x, y).G,
                                                   image.GetPixel(x, y).B);
                }
            }

            bcsNode.Contrast = 0.8;
            // Process the input frame. Reuse the frames object by writing back to it
            Frame[] outputFrames = bcsNode.Process(inputFrames, 0);

            // Copy RGB content of the processed frame to the output image
            for (int y = 0; y < size.Height; y++)
            {
                for (int x = 0; x < size.Width; ++x)
                {
                    // Reuse the created image object
                    image.SetPixel(x, y, System.Drawing.Color.FromArgb(outputFrames[0][x, y].R, outputFrames[0][x, y].G, outputFrames[0][x, y].B));
                }
            }

            image.Save("..\\..\\..\\..\\output\\papagei-bcs-" + (int)(bcsNode.Contrast * 10) + ".png");

            // Set contrast to a negative value and brightness to the maximum
            bcsNode.Contrast   = -0.6;
            bcsNode.Brightness = 1;
            outputFrames       = bcsNode.Process(inputFrames, 0);

            for (int y = 0; y < size.Height; y++)
            {
                for (int x = 0; x < size.Width; ++x)
                {
                    // Reuse the created image object
                    image.SetPixel(x, y, System.Drawing.Color.FromArgb(outputFrames[0][x, y].R, outputFrames[0][x, y].G, outputFrames[0][x, y].B));
                }
            }

            bcsNode.Brightness = -1;
            bcsNode.Process(inputFrames, 0);

            image.Save("..\\..\\..\\..\\output\\papagei-bcs-" + (int)(bcsNode.Contrast * 10) + ".png");
        }
Esempio n. 2
0
        public void GlobalTest10()
        {
            MainViewModel     mvm = MainViewModelTest.GetInstance();
            PipelineViewModel pvm = mvm.PipelineViewModel;

            // Step 1: The user clicks "New" to create a new pipeline
            mvm.Clear();
            Assert.Empty(mvm.Model.Graph.Nodes);
            var mock = new Mock <IDragEventInfo>();

            // Step 2: Create each type of node once by drag-and-drop
            VideoInputNode    vin = (VideoInputNode)AddNode <VideoInputNode>(pvm, mock, new Point(10, 30));
            AdditiveMergeNode amn = (AdditiveMergeNode)AddNode <AdditiveMergeNode>(pvm, mock, new Point(30, 30));
            BlurNode          bn  = (BlurNode)AddNode <BlurNode>(pvm, mock, new Point(50, 30));
            BrightnessContrastSaturationNode bcsn =
                (BrightnessContrastSaturationNode)AddNode <BrightnessContrastSaturationNode>(pvm, mock, new Point(70, 30));
            ColorInputNode            cin   = (ColorInputNode)AddNode <ColorInputNode>(pvm, mock, new Point(10, 50));
            DelayNode                 dln   = (DelayNode)AddNode <DelayNode>(pvm, mock, new Point(90, 30));
            DiagramNode               dgn   = (DiagramNode)AddNode <DiagramNode>(pvm, mock, new Point(110, 30));
            DifferenceNode            dfn   = (DifferenceNode)AddNode <DifferenceNode>(pvm, mock, new Point(30, 50));
            HistogramNode             hn    = (HistogramNode)AddNode <HistogramNode>(pvm, mock, new Point(50, 50));
            ImageInputNode            imin  = (ImageInputNode)AddNode <ImageInputNode>(pvm, mock, new Point(70, 50));
            InverterNode              invn  = (InverterNode)AddNode <InverterNode>(pvm, mock, new Point(90, 50));
            NoiseInputNode            nin   = (NoiseInputNode)AddNode <NoiseInputNode>(pvm, mock, new Point(110, 50));
            OverlayNode               on    = (OverlayNode)AddNode <OverlayNode>(pvm, mock, new Point(10, 70));
            RgbSplitNode              rgbsn = (RgbSplitNode)AddNode <RgbSplitNode>(pvm, mock, new Point(30, 70));
            WeightedAveragedMergeNode wamn  =
                (WeightedAveragedMergeNode)AddNode <WeightedAveragedMergeNode>(pvm, mock, new Point(50, 70));

            // Step 3: Create the edges
            mvm.Model.Graph.AddEdge(vin.Outputs[0], bn.Inputs[0]);
            Assert.Equal(vin.Outputs[0], bn.Inputs[0].Source);
            amn.Inputs.Add(new Node.Input());
            mvm.Model.Graph.AddEdge(vin.Outputs[0], amn.Inputs[0]);
            Assert.Equal(vin.Outputs[0], amn.Inputs[0].Source);
            mvm.Model.Graph.AddEdge(bn.Outputs[0], dln.Inputs[0]);
            Assert.Equal(bn.Outputs[0], dln.Inputs[0].Source);
            mvm.Model.Graph.AddEdge(dln.Outputs[0], dfn.Inputs[0]);
            Assert.Equal(dln.Outputs[0], dfn.Inputs[0].Source);
            mvm.Model.Graph.AddEdge(imin.Outputs[0], dfn.Inputs[1]);
            Assert.Equal(imin.Outputs[0], dfn.Inputs[1].Source);
            mvm.Model.Graph.AddEdge(dfn.Outputs[0], invn.Inputs[0]);
            Assert.Equal(dfn.Outputs[0], invn.Inputs[0].Source);
            mvm.Model.Graph.AddEdge(invn.Outputs[0], on.Inputs[0]);
            Assert.Equal(invn.Outputs[0], on.Inputs[0].Source);
            mvm.Model.Graph.AddEdge(vin.Outputs[0], on.Inputs[1]);
            Assert.Equal(vin.Outputs[0], on.Inputs[1].Source);
            mvm.Model.Graph.AddEdge(vin.Outputs[0], rgbsn.Inputs[0]);
            Assert.Equal(vin.Outputs[0], rgbsn.Inputs[0].Source);
            mvm.Model.Graph.AddEdge(rgbsn.Outputs[2], hn.Inputs[0]);
            Assert.Equal(rgbsn.Outputs[2], hn.Inputs[0].Source);
        }
Esempio n. 3
0
		public void NullableDoublePropertyViewModelTest()
		{
			// Since this property viewmodel commits its change as soon as the change is made, the commitChange method
			// is executed, which requires a working IoC
			IoC.GetInstance = IoCAggregator;

			NullableDoublePropertyViewModel en = new NullableDoublePropertyViewModel();
			BrightnessContrastSaturationNode bcs = new BrightnessContrastSaturationNode();
			PropertyDescriptor pd = TypeDescriptor.GetProperties(bcs).Find("contrast", true);
			en.Initialize(bcs, pd);

			Assert.True(en.SlidersAreEnabled);
			Assert.Equal(pd.Attributes.OfType<RangeAttribute>().First().Maximum, en.Maximum);
			Assert.Equal(pd.Attributes.OfType<RangeAttribute>().First().Minimum, en.Minimum);
		}
Esempio n. 4
0
        public void NullableDoublePropertyViewModelTest()
        {
            // Since this property viewmodel commits its change as soon as the change is made, the commitChange method
            // is executed, which requires a working IoC
            IoC.GetInstance = IoCAggregator;

            NullableDoublePropertyViewModel  en  = new NullableDoublePropertyViewModel();
            BrightnessContrastSaturationNode bcs = new BrightnessContrastSaturationNode();
            PropertyDescriptor pd = TypeDescriptor.GetProperties(bcs).Find("contrast", true);

            en.Initialize(bcs, pd);

            Assert.True(en.SlidersAreEnabled);
            Assert.Equal(pd.Attributes.OfType <RangeAttribute>().First().Maximum, en.Maximum);
            Assert.Equal(pd.Attributes.OfType <RangeAttribute>().First().Minimum, en.Minimum);
        }
Esempio n. 5
0
        public void ViewlessPipeline()
        {
            var input = new VideoInputNode {
                FileName = new FilePath(@"..\..\..\..\resources\americanFootball_352x240_125.yuv")
            };
            Node graph = new BrightnessContrastSaturationNode {
                Contrast = 10
            };                                                                               //new BlurNode { Radius = 3 };

            graph.Inputs[0].Source = input.Outputs[0];
            IObservable <Frame> frames = new PipelineDriver().RenderTicks(new[] { graph }, tickCount: input.TickCount)
                                         .Select(dic => dic[graph.Outputs[0]]);

            YuvEncoder.Encode(
                @"..\..\..\..\output\ViewlessPipeline_sif.yuv",
                frames.ToEnumerable()
                );
        }