Exemplo n.º 1
0
        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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static Bitmap ApplyFilter(Bitmap bitmap, string filter, int[] selection)
        {
            if (ImageProcessors.TryGetValue(filter, out var processor))
            {
                return(processor(bitmap, selection));
            }

            return(null);
        }