public static bool ApplyFilter(BitMapReading input, string filterName, string output)
        {
            uint width    = input.Width;
            uint height   = input.Height;
            int  channels = input.BitsPerPixel / 8;

            byte[][] image = input.Image;
            byte[][] filteredImage;

            switch (filterName)
            {
            case "GRAY":
                filteredImage = GrayFilter.ApplyFilter(width, height, channels, image);
                break;

            case "MEDIAN":
                filteredImage = MedianFilter.ApplyFilter(width, height, channels, image);
                break;

            case "GAUSS":
                filteredImage = ConvolutionFilters.GaussFilter(width, height, channels, image);
                break;

            case "SOBELX":
                filteredImage = ConvolutionFilters.SobelXFilter(width, height, channels, image);
                break;

            case "SOBELY":
                filteredImage = ConvolutionFilters.SobelYFilter(width, height, channels, image);
                break;

            case "SOBEL":
            case "SOBELXY":
                filteredImage = ConvolutionFilters.SobelFilter(width, height, channels, image);
                break;

            default:
                return(false);
            }

            try
            {
                new BitMapWriting(output, input.Header, filteredImage);
            }
            catch (Exception)
            {
                Console.WriteLine("Could not open\\create output file");
                Environment.Exit(3);
            }

            Console.WriteLine($"{filterName} filter was applied successfully");
            return(true);
        }
        static void Main(string[] args)
        {
            PrintDescription();

            if (args.Length != 3)
            {
                Console.WriteLine(
                    "Неверное количество аргументов. Формат: <программа> <имя_входного_файла> <название_фильтра> <имя выходного файла>");
                return;
            }

            string currentFilter = args[1];

            if (!currentFilter.Equals("median") && !currentFilter.Equals("gauss") && !currentFilter.Equals("sobelx") &&
                !currentFilter.Equals("sobely") && !currentFilter.Equals("gray"))
            {
                Console.WriteLine("Введённый фильтр не относится к списку доступных. Попробуйте ещё раз.");
                return;
            }

            FileStream fileIn;

            try
            {
                fileIn = new FileStream(args[0], FileMode.Open, FileAccess.ReadWrite);
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Ошибка! Входной файл не был найден! Попробуйте ещё раз.");
                return;
            }

            FileStream fileOut;

            try
            {
                fileOut = new FileStream(args[2], FileMode.Create, FileAccess.ReadWrite);
            }
            catch (Exception)
            {
                fileIn.Close();
                Console.WriteLine("Ошибка! Не удалось создать/открыть выходной файл. Попробуйте ещё раз.");
                return;
            }

            BitMapFile file = new(fileIn);

            fileIn.Close();

            if (currentFilter.Equals("gray"))
            {
                Console.WriteLine("Выбран фильтр серого");
                GrayFilter.ApplyFilter(file);
            }
            else if (currentFilter.Equals("median"))
            {
                Console.WriteLine("Выбран усредняющий фильтр");
                MedianFilter.ApplyFilter(file);
            }
            else if (currentFilter.Equals("gauss"))
            {
                Console.WriteLine("Выбран фильтр Гаусса");
                GaussFilter.ApplyFilter(file);
            }
            else if (currentFilter.Equals("sobelx"))
            {
                Console.WriteLine("Выбран фильтр Собеля по X");
                SobelFilter.ApplyFilter(file, SobelFilter.Type.X);
            }
            else if (currentFilter.Equals("sobely"))
            {
                Console.WriteLine("Выбран фильтр Собеля по Y");
                SobelFilter.ApplyFilter(file, SobelFilter.Type.Y);
            }

            Console.WriteLine("Фильтр был успешно применён");

            file.WriteResult(fileOut);
            fileOut.Close();
        }