Esempio n. 1
0
        public override ImgProps Process(ImgProps input)
        {
            ImgProps noisedImage = new ImgProps(input.Width, input.Height);

            Random random = new Random();

            const int highestByte = 255;

            int noisedData;

            for (int i = 0; i < input.Width; i++)
            {
                for (int j = 0; j < input.Height; j++)
                {
                    noisedData = random.Next(-(int)(_decimalPercent * highestByte), +(int)(_decimalPercent * highestByte));

                    noisedImage[i, j] = new Rgba32(
                        ImageUtility.RestrictOverflow(input[i, j].R + noisedData),
                        ImageUtility.RestrictOverflow(input[i, j].G + noisedData),
                        ImageUtility.RestrictOverflow(input[i, j].B + noisedData),
                        input[i, j].A
                        );
                }
            }

            return(noisedImage);
        }
Esempio n. 2
0
        public override ImgProps Process(ImgProps input)
        {
            if (_kernelType == "edge")
            {
                selectedKernel = ImageUtility.edge;
            }
            else if (_kernelType == "sharpen")
            {
                selectedKernel = ImageUtility.sharpen;
            }
            else if (_kernelType == "blur")
            {
                selectedKernel = ImageUtility.blur;
            }

            int imageWidth   = input.Width;
            int imageheight  = input.Height;
            int kernelWidth  = selectedKernel.GetLength(0);
            int kernelHeight = selectedKernel.GetLength(1);
            int offset       = (kernelWidth - 1) / 2;

            ImgProps convolved = new ImgProps(imageWidth - offset, imageheight - offset);

            for (int i = offset; i < input.Width - offset; i++)
            {
                for (int j = offset; j < input.Height - offset; j++)
                {
                    double red   = 0;
                    double green = 0;
                    double blue  = 0;

                    for (int a = 0; a < kernelWidth; a++)
                    {
                        for (int b = 0; b < kernelHeight; b++)
                        {
                            red   += input[i + a - (offset), j + b - (offset)].R * selectedKernel[a, b];
                            green += input[i + a - (offset), j + b - (offset)].G * selectedKernel[a, b];
                            blue  += input[i + a - (offset), j + b - (offset)].B * selectedKernel[a, b];
                        }
                    }

                    red   = ImageUtility.RestrictOverflow((int)red);
                    green = ImageUtility.RestrictOverflow((int)green);
                    blue  = ImageUtility.RestrictOverflow((int)blue);


                    convolved[i, j] = new Rgba32((byte)red, (byte)green, (byte)blue);
                }
            }
            return(convolved);
        }
Esempio n. 3
0
        public override ImgProps Process(ImgProps input)
        {
            double centerX     = input.Width / 2;
            double centerY     = input.Height / 2;
            double maxDistance = Math.Sqrt(Math.Pow(centerX, 2) + Math.Pow(centerY, 2));

            double distX;
            double distY;
            double distance;

            double brightness;

            ImgProps vignetteImage = new ImgProps(input.Width, input.Height);

            for (int i = 0; i < input.Width; i++)
            {
                for (int j = 0; j < input.Height; j++)
                {
                    distX = centerX - i;
                    distY = centerY - j;

                    distance = (int)(Math.Sqrt(Math.Pow(distX, 2) + Math.Pow(distY, 2)));

                    brightness = Math.Pow(((maxDistance - distance) / maxDistance), 2);

                    vignetteImage[i, j] = new Rgba32(
                        ImageUtility.RestrictOverflow((int)(input[i, j].R * brightness)),
                        ImageUtility.RestrictOverflow((int)(input[i, j].G * brightness)),
                        ImageUtility.RestrictOverflow((int)(input[i, j].B * brightness)),
                        input[i, j].A
                        );
                }
            }

            return(vignetteImage);
        }