コード例 #1
0
        public void ApplyFilters(string outputName, string filter)
        {
            uint   i, j;
            byte   redCopy, greenCopy, blueCopy, alphaCopy, flag = 0;
            Pixels extendedPic     = new Pixels(Dheader.Height + 2, Dheader.Width + 2);
            Pixels extendedPicCopy = new Pixels(Dheader.Height + 2, Dheader.Width + 2);

            for (i = 0; i < Dheader.Height + 2; ++i)
            {
                for (j = 0; j < Dheader.Width + 2; ++j)
                {
                    extendedPicCopy.Arr[i][j] = new Pixel();
                    extendedPic.Arr[i][j]     = new Pixel();
                }
            }
            for (i = 0; i < Dheader.Height; i++)
            {
                extendedPic.Arr[i + 1][0] = Pixels[i][0];
                extendedPic.Arr[i + 1][Dheader.Width + 1] = Pixels[i][Dheader.Width - 1];
                for (j = 0; j < Dheader.Width; j++)
                {
                    extendedPic.Arr[i + 1][j + 1] = Pixels[i][j];
                }
            }
            for (j = 0; j < Dheader.Width + 2; j++)
            {
                extendedPic.Arr[0][j] = extendedPic.Arr[1][j];
                extendedPic.Arr[Dheader.Height + 1][j] = extendedPic.Arr[Dheader.Height][j];
            }
            for (i = 0; i < Dheader.Height + 2; ++i)
            {
                for (j = 0; j < Dheader.Width + 2; ++j)
                {
                    redCopy   = extendedPic.Arr[i][j].Red; // I did it because i wanted not reference copy of the array but copy of its args
                    blueCopy  = extendedPic.Arr[i][j].Blue;
                    greenCopy = extendedPic.Arr[i][j].Green;
                    alphaCopy = extendedPic.Arr[i][j].Alpha;
                    extendedPicCopy.Arr[i][j].Red   = redCopy;
                    extendedPicCopy.Arr[i][j].Blue  = blueCopy;
                    extendedPicCopy.Arr[i][j].Green = greenCopy;
                    extendedPicCopy.Arr[i][j].Alpha = alphaCopy;
                }
            }
            for (i = 1; i <= Dheader.Height; i++)
            {
                for (j = 1; j <= Dheader.Width; j++)
                {
                    if (filter == "Median")
                    {
                        extendedPic.MedianFilter(extendedPicCopy.Arr, (int)i, (int)j);
                    }
                    else if (filter == "Gauss")
                    {
                        extendedPic.GaussFilter3x3(extendedPicCopy.Arr, (int)i, (int)j);
                    }
                    else if (filter == "SobelX")
                    {
                        extendedPic.SobelX(extendedPicCopy.Arr, (int)i, (int)j);
                    }
                    else if (filter == "SobelY")
                    {
                        extendedPic.SobelY(extendedPicCopy.Arr, (int)i, (int)j);
                    }
                    else if (filter == "GrayScale")
                    {
                        extendedPic.Arr[i][j].GrayScale();
                    }
                    else
                    {
                        Console.WriteLine("Incorrect name of filter");
                        flag = 1;
                        break;
                    }
                }
                if (flag == 1)
                {
                    break;
                }
            }
            for (i = 1; i < Dheader.Height + 1; ++i)
            {
                for (j = 1; j < Dheader.Width + 1; ++j)
                {
                    this.Pixels[i - 1][j - 1] = extendedPic.Arr[i][j];
                }
            }
            this.WriteImage(outputName);
        }