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(); }