private static void InitializeProcessors(IEnumerable <Type> types) { var filters = Enum.GetNames(typeof(Filters)).Select(x => x.ToLowerInvariant()).ToArray(); var methods = new List <MethodInfo>(); foreach (var type in types) { methods.AddRange(type.GetMethods()); } foreach (var method in methods) { var filterProcessor = method.GetCustomAttributes(typeof(FilterProcessor), true); if (filterProcessor.Length == 1) { var filter = (filterProcessor[0] as FilterProcessor)?.Filter.ToLowerInvariant(); if (!string.IsNullOrEmpty(filter) && filters.Contains(filter)) { var instance = new ImageProcessors(); var processor = (Func <Bitmap, int[], Bitmap>)method.CreateDelegate(typeof(Func <Bitmap, int[], Bitmap>), instance); ImageProcessors.Add(filter, processor); } } } }
public static Bitmap ApplyFilter(Bitmap bitmap, string filter, int[] selection) { if (ImageProcessors.TryGetValue(filter, out var processor)) { return(processor(bitmap, selection)); } return(null); }