public void Process(Bitmap imgSource, IProcessorCommand command)
        {
            if (imgSource == null || !Actions.ContainsKey(command.Command))
            {
                return;
            }

            var action     = Actions[command.Command];
            var data       = imgSource.GetBitmapData();
            var bof        = data.GetBof();
            var pixelBytes = imgSource.GetPixelBytes();
            var byteCount  = pixelBytes * data.Width;

            Parallel.For(0, data.Height, y =>
            {
                var currentPointer = bof + y * data.Stride;
                var beforePointer  = bof + (y - 1) * data.Stride;
                var afterPointer   = bof + (y + 1) * data.Stride;
                for (var x = 0; x < byteCount - 9; x += pixelBytes)
                {
                    action.Process(currentPointer, beforePointer, afterPointer, x, x - pixelBytes, x + pixelBytes);
                }
            });
            imgSource.UnlockBits(data);
        }
        public void ProcessorCommand_NotEqualsHashCodesForDifferentCommand()
        {
            //Arrange
            IProcessorCommand addCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand.Id = "1";
            IProcessorCommand subCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand.Id = "1";
            IProcessorCommand tranCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand.Id = "1";
            IProcessorCommand multCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand.Id = "1";
            IProcessorCommand badCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand.Id = "1";

            //Act

            //Assert
            Assert.NotEqual(addCommand.GetHashCode(), subCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), tranCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), multCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), badCommand.GetHashCode());
        }
Example #3
0
        public static IProcessorCommand GetProcessor(Operator operation, IEnumerable <Matrix <int> > matrices)
        {
            IProcessorCommand command = GetProcessor(operation);

            command.Source = matrices;
            return(command);
        }
        public void ProcessorCommand_EqualsForSameCommand()
        {
            //Arrange
            IProcessorCommand addCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand.Id = "1";
            IProcessorCommand subCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand.Id = "1";
            IProcessorCommand tranCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand.Id = "1";
            IProcessorCommand multCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand.Id = "1";
            IProcessorCommand badCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand.Id = "1";

            IProcessorCommand addCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand3.Id = "1";
            IProcessorCommand subCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand3.Id = "1";
            IProcessorCommand tranCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand3.Id = "1";
            IProcessorCommand multCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand3.Id = "1";
            IProcessorCommand badCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand3.Id = "1";

            //Act

            //Assert
            Assert.Equal(addCommand, addCommand3);
            Assert.Equal(subCommand, subCommand3);
            Assert.Equal(tranCommand, tranCommand3);
            Assert.Equal(multCommand, multCommand3);
            Assert.Equal(badCommand, badCommand3);
        }
        public void Process(Bitmap imgSource, IProcessorCommand command)
        {
            var histogram  = GetGrayscaleHistogram(imgSource);
            var median     = CalculateMedian(histogram).ToArgb();
            var data       = imgSource.GetBitmapData();
            var bof        = data.GetBof();
            var pixelBytes = imgSource.GetPixelBytes();
            var byteCount  = pixelBytes * data.Width;

            Parallel.For(0, data.Height, y =>
            {
                var currentPointer = bof + y * data.Stride;
                for (var x = 0; x < byteCount; x += pixelBytes)
                {
                    Process(currentPointer, x, median);
                }
            });
            imgSource.UnlockBits(data);
        }
Example #6
0
        public static bool TryMapTo(this DataContentModel fromModel, out IProcessorCommand toModel)
        {
            if (fromModel == null)
            {
                throw new ArgumentNullException(nameof(fromModel));
            }

            //Right command contains minimum 3 lines: operation, empty and matrix
            if (fromModel.ContentStrings.Length < 3 ||
                !string.IsNullOrWhiteSpace(fromModel.ContentStrings[1]) ||
                string.IsNullOrWhiteSpace(fromModel.ContentStrings[2]))
            {
                //It is not command file, skip
                toModel = null;
                return(false);
            }

            string strOperation = fromModel.ContentStrings[0];

            if (!Enum.TryParse(strOperation, true, out ProcessorCommandFabric.Operator operation))
            {
                //It is not command file, skip
                toModel = null;
                return(false);
            }

            IProcessorCommand processor = ProcessorCommandFabric.GetProcessor(operation);

            if (!fromModel.TryMapTo(out IEnumerable <Matrix <int> > matrices))
            {
                //It is a command file, but wrong data, return BadCommand
                toModel = ProcessorCommandFabric.GetBadProcessor(fromModel.FilePath);
                return(true);
            }
            processor.Source = matrices;
            processor.Id     = fromModel.FilePath;
            toModel          = processor;
            return(true);
        }
        public void Process(Bitmap imgSource, IProcessorCommand command)
        {
            if (imgSource == null || !Actions.ContainsKey(command.Command))
            {
                return;
            }

            var action     = Actions[command.Command];
            var channel    = EnumUtil.Convert <ARGBChannel>(command.Parameter.ToUpper());
            var data       = imgSource.GetBitmapData();
            var bof        = data.GetBof();
            var pixelBytes = imgSource.GetPixelBytes();
            var byteCount  = pixelBytes * data.Width;

            Parallel.For(0, data.Height, y =>
            {
                var currentPointer = bof + y * data.Stride;
                for (var x = 0; x < byteCount; x += pixelBytes)
                {
                    action.Process(currentPointer, x, channel);
                }
            });
            imgSource.UnlockBits(data);
        }
Example #8
0
        public static bool TryMapTo(this IProcessorCommand fromModel, out DataContentModel toModel)
        {
            if (fromModel == null)
            {
                throw new ArgumentNullException(nameof(fromModel));
            }

            if (fromModel is BadProcessorCommand || !fromModel.IsCalculated)
            {
                toModel = null;
                return(false);
            }
            toModel = new DataContentModel
            {
                FilePath = fromModel.Id + "_result.txt"
            };
            List <string> lstToModel  = new List <string>();
            bool          firstMatrix = true;

            foreach (Matrix <int> matrix in fromModel.Result)
            {
                if (!firstMatrix)
                {
                    lstToModel.Add(string.Empty);
                }
                if (!matrix.TryMapTo(out IEnumerable <string> lstMatrix))
                {
                    toModel = null;
                    return(false);
                }
                lstToModel.AddRange(lstMatrix);
                firstMatrix = false;
            }
            toModel.ContentStrings = lstToModel.ToArray();
            return(true);
        }
 public void Process(Bitmap imgSource, IProcessorCommand command)
 {
     Processors[command.Mode]
     .Process(imgSource, command);
 }
        public void ProcessorCommand_NotEqualsForDifferentCommand()
        {
            //Arrange
            IProcessorCommand addCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand.Id = "1";
            IProcessorCommand subCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand.Id = "1";
            IProcessorCommand tranCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand.Id = "1";
            IProcessorCommand multCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand.Id = "1";
            IProcessorCommand badCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand.Id = "1";

            IProcessorCommand addCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand2.Id = "2";
            IProcessorCommand subCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand2.Id = "2";
            IProcessorCommand tranCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand2.Id = "2";
            IProcessorCommand multCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand2.Id = "2";
            IProcessorCommand badCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand2.Id = "2";

            List <Matrix <int> > lstMatrix = new List <Matrix <int> >
            {
                new Matrix <int>
                {
                    Data = new int[, ] {
                        { 1, 2, 3, 4, 5 },
                    }
                }
            };
            IProcessorCommand addCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add, lstMatrix);

            addCommand4.Id = "1";
            IProcessorCommand subCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract, lstMatrix);

            subCommand4.Id = "1";
            IProcessorCommand tranCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose, lstMatrix);

            tranCommand4.Id = "1";
            IProcessorCommand multCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply, lstMatrix);

            multCommand4.Id = "1";
            IProcessorCommand badCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad, lstMatrix);

            badCommand4.Id = "1";

            List <Matrix <int> > lstMatrix3 = new List <Matrix <int> >
            {
                new Matrix <int>
                {
                    Data = new int[, ] {
                        { 100, 2, 3, 4, 5 },
                    }
                }
            };
            IProcessorCommand addCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add, lstMatrix3);

            addCommand3.Id = "1";
            IProcessorCommand subCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract, lstMatrix3);

            subCommand3.Id = "1";
            IProcessorCommand tranCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose, lstMatrix3);

            tranCommand3.Id = "1";
            IProcessorCommand multCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply, lstMatrix3);

            multCommand3.Id = "1";
            IProcessorCommand badCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad, lstMatrix3);

            badCommand3.Id = "1";

            //Act

            //Assert
            Assert.NotEqual(addCommand, subCommand);
            Assert.NotEqual(addCommand, tranCommand);
            Assert.NotEqual(addCommand, multCommand);
            Assert.NotEqual(addCommand, badCommand);

            Assert.NotEqual(addCommand, addCommand2);
            Assert.NotEqual(subCommand, subCommand2);
            Assert.NotEqual(tranCommand, tranCommand2);
            Assert.NotEqual(multCommand, multCommand2);
            Assert.NotEqual(badCommand, badCommand2);

            Assert.NotEqual(addCommand, addCommand4);
            Assert.NotEqual(subCommand, subCommand4);
            Assert.NotEqual(tranCommand, tranCommand4);
            Assert.NotEqual(multCommand, multCommand4);
            Assert.NotEqual(badCommand, badCommand4);

            Assert.NotEqual(addCommand3, addCommand4);
            Assert.NotEqual(subCommand3, subCommand4);
            Assert.NotEqual(tranCommand3, tranCommand4);
            Assert.NotEqual(multCommand3, multCommand4);
            Assert.NotEqual(badCommand3, badCommand4);

            Assert.NotEqual(addCommand.GetHashCode(), subCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), tranCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), multCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), badCommand.GetHashCode());
        }