Esempio n. 1
0
        public Bitmap ApplyFilter(Bitmap image, IFilterParameters filterParameters)
        {
            matrixFilterParameters = filterParameters as MatrixFilterParameters;
            if (matrixFilterParameters == null)
            {
                throw new ArgumentException();
            }

            var destImage = new Bitmap(image);

            resultImage = new LockBitmap(destImage);
            resultImage.LockBits();

            sourceImage = new LockBitmap(image);
            sourceImage.LockBits();

            matrixLength = Convert.ToInt32(Math.Sqrt(matrixFilterParameters.Matrix.Length));
            Parallel.For(0, sourceImage.Width, x =>
            {
                for (int y = 0; y < sourceImage.Height; y++)
                {
                    Wrap(x, y);
                }
            });
            resultImage.UnlockBits();
            sourceImage.UnlockBits();
            return destImage;
        }
Esempio n. 2
0
            public override IQueryable <Thing> ApplyListSearchTerm(IQueryable <Thing> query,
                                                                   IFilterParameters parameters)
            {
                var sql = new List <string> {
                    "SELECT * FROM [dbo].[Things] WHERE 1=1"
                };

                var sqlParams = new List <SqlParameter>();

                if (false == string.IsNullOrWhiteSpace(FooPart))
                {
                    sql.Add("[Foo] LIKE '%' + @FooPart + '%' ");
                    sqlParams.Add(new SqlParameter("FooPart", FooPart));
                }

                if (false == string.IsNullOrWhiteSpace(BarPart))
                {
                    sql.Add("[Bar] LIKE '%' + @BarPart + '%' ");
                    sqlParams.Add(new SqlParameter("BarPart", BarPart));
                }

                return(sql.Count == 1
                    ? Enumerable.Empty <Thing>().AsQueryable()
#pragma warning disable EF1000 // Possible SQL injection vulnerability.
                    : query.FromSql(string.Join(" AND ", sql), sqlParams.Cast <object>().ToArray()));

#pragma warning restore EF1000 // Possible SQL injection vulnerability.
            }
Esempio n. 3
0
        public void ExecuteFilter()
        {
            if (Parameters is null)
            {
                Parameters = CreateDefaultParameters();
            }

            ResultImage = null;
            IsLoading   = true;

            var inputImage = _imageloader.LoadedImage.ToBitmap();

            if (SelectedFilterType == FilterType.GaussianBlur)
            {
                var samplingScale = (int)Math.Ceiling(Math.Max(inputImage.Width, inputImage.Height) * 1.0 / SampleCountPerDimension);
                Task.Run(() =>
                {
                    ResultImage = new GaussianBlurTaskManager(inputImage).UseDownsampling(samplingScale)
                                  .RunAll(Environment.ProcessorCount, _kernel)
                                  .WaitForResult()
                                  .ToBitmapImage(ImageFormat.Jpeg);
                    IsLoading = false;
                });
            }
            else
            {
                Task.Run(() =>
                {
                    ResultImage = new AdaptiveThresholding().Execute(_thresholdingParameters, inputImage)
                                  .ToBitmapImage(ImageFormat.Jpeg);
                    IsLoading = false;
                });
            }
        }
Esempio n. 4
0
        private string ToSql(ISqlFormatter sql, IList <IColumn> select,
                             IFilterParameters filterParams, IEnumerable <Filter> outerFilters,
                             long skip, int take)
        {
            if (Aggregations.Count == 1)
            {
                return(Aggregations[0].ToSql(sql, select, outerFilters.Concat(Filters), filterParams, OrderBy, skip, take));
            }

            var ordering = "a0.Value0 desc";

            if (select != null && OrderBy.Count != 0)
            {
                ordering = string.Join(", ", OrderBy.Select(FindOrderingColumn));
            }

            return(_aggregatedTemplate(new
            {
                skipAndTake = sql.SkipAndTake(skip, take),
                Aggregations = Aggregations.Select(x =>
                                                   x.ToSql(sql, select, outerFilters.Concat(Filters), filterParams)),
                Select = select,
                ordering
            }));
        }
Esempio n. 5
0
        public string ToSql(
            ISqlFormatter sql,
            IEnumerable <IColumn> selectColumns,
            IEnumerable <Filter> outerFilters,
            IFilterParameters filterParams,
            IEnumerable <Ordering> orderings = null,
            long?skip = null,
            int?take  = null)
        {
            var joins = new Joins();

            var selects = selectColumns?.Select((c, i) =>
                                                $"{sql.IdentifierPair(joins[c.Table], c.DbName)} Select{i}").ToList()
                          ?? new List <string>();

            var aggColumn = Column != null ? $"{Function}({joins.Aliased(Column, sql)})" : null;

            if (aggColumn != null)
            {
                selects.Add($"{aggColumn} Value0");
            }

            if (selects.Count == 0)
            {
                throw new InvalidOperationException("Must select something");
            }

            var filters = outerFilters.Concat(Filters).Select(f => new
            {
                Column = joins.Aliased(f.Column, sql),
                f.Operator,
                Param = filterParams[f]
            })
                          .ToList();

            var groupBy = selectColumns?.Select(x => new
            {
                Part = joins.Aliased(x, sql)
            })
                          .ToList();

            var skipAndTake = skip != null && take != null
                    ? sql.SkipAndTake(skip.Value, take.Value)
                    : null;

            var orderBy = skipAndTake == null ? null :
                          orderings.Any() ? string.Join(", ", orderings.Select(x => $"{joins.Aliased(x.Column, sql)} {x.Direction}")) :
                          aggColumn != null ? $"{aggColumn} desc" :
                          null;

            return(_template(new
            {
                selects,
                filters,
                joins = joins.ToSql(sql),
                groupBy,
                orderBy,
                skipAndTake
            }));
        }
Esempio n. 6
0
        public virtual async Task <ItemResult <int> > GetCountAsync(IFilterParameters parameters)
        {
            var query = GetQuery(parameters);

            query = ApplyListFiltering(query, parameters);

            return(new ItemResult <int>(await GetListTotalCountAsync(query, parameters)));
        }
Esempio n. 7
0
        public string ToSql(ISqlFormatter sql,
                            IFilterParameters filterParams,
                            IEnumerable <Filter> outerFilters)
        {
            var result = ToSql(sql, Select, filterParams, outerFilters, Skip, Take);

            if (Totals)
            {
                result += ";" + ToSql(sql, null, filterParams, outerFilters, 0, 1);
            }

            return(result);
        }
Esempio n. 8
0
        /// <summary>
        /// Applies the "filter.propertyName=exactValue" filters to a query.
        /// These filters may be set when making a list request, and are found in ListParameters.Filters.
        /// This is called by ApplyListFiltering when constructing a list result.
        /// </summary>
        /// <param name="query">The query to filter.</param>
        /// <param name="parameters">The parameters by which to filter.</param>
        /// <returns>The new query with additional filtering applied.</returns>
        public virtual IQueryable <T> ApplyListPropertyFilters(IQueryable <T> query, IFilterParameters parameters)
        {
            // Add key value pairs where = is used.
            foreach (var clause in parameters.Filter)
            {
                var prop = ClassViewModel.PropertyByName(clause.Key);
                if (prop != null &&
                    prop.IsUrlFilterParameter &&
                    prop.SecurityInfo.IsReadable(User))
                {
                    query = ApplyListPropertyFilter(query, prop, clause.Value);
                }
            }

            return(query);
        }
Esempio n. 9
0
        /// <summary>
        /// Evaluate the given query to determine the total count of items to report to the client.
        /// </summary>
        /// <param name="query">The filtered query from which to obtain a count.</param>
        /// <param name="parameters">The parameters by which to query.</param>
        /// <returns>The total count of items represented by the query.</returns>
        public virtual Task <int> GetListTotalCountAsync(IQueryable <T> query, IFilterParameters parameters)
        {
            var canUseAsync = CanEvalQueryAsynchronously(query);

            return(canUseAsync ? query.CountAsync() : Task.FromResult(query.Count()));
        }
Esempio n. 10
0
 /// <summary>
 /// Applies all filtering that is done when getting a list of data
 /// (or metadata about a particular set of filters, like a count).
 /// This includes ApplyListPropertyFilters and ApplyListSearchTerm.
 /// This is called by GetListAsync when constructing a list result.
 /// </summary>
 /// <param name="query">The query to filter.</param>
 /// <param name="parameters">The parameters by which to filter.</param>
 /// <returns>The new query with additional filtering applied.</returns>
 public virtual IQueryable <T> ApplyListFiltering(IQueryable <T> query, IFilterParameters parameters)
 {
     query = ApplyListPropertyFilters(query, parameters);
     query = ApplyListSearchTerm(query, parameters);
     return(query);
 }
Esempio n. 11
0
        /// <summary>
        /// Applies a filter to the query based on the search term recieved from the client.
        /// This search term is found in parameters.Search.
        /// This is called by ApplyListFiltering when constructing a list result.
        /// </summary>
        /// <param name="query">The query to filter.</param>
        /// <param name="parameters"></param>
        /// <returns>The new query with additional filtering applied.</returns>
        public virtual IQueryable <T> ApplyListSearchTerm(IQueryable <T> query, IFilterParameters parameters)
        {
            var searchTerm = parameters.Search;

            // Add general search filters.
            // These search specified fields in the class
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                return(query);
            }

            // See if the user has specified a field with a colon and search on that first
            if (searchTerm.Contains(":"))
            {
                var fieldValueParts = searchTerm.Split(new string[] { ":" }, StringSplitOptions.None);

                var field = fieldValueParts[0].Trim();
                var value = fieldValueParts[1].Trim();

                var prop = ClassViewModel.ClientProperties.FirstOrDefault(f =>
                                                                          string.Compare(f.Name, field, true) == 0 ||
                                                                          string.Compare(f.DisplayName, field, true) == 0);

                if (prop != null && !string.IsNullOrWhiteSpace(value))
                {
                    var expressions = prop
                                      .SearchProperties(ClassViewModel, maxDepth: 1, force: true)
                                      .SelectMany(p => p.GetLinqDynamicSearchStatements(Context.User, Context.TimeZone, "it", value))
                                      .Select(t => t.statement)
                                      .ToList();

                    // Join these together with an 'or'
                    if (expressions.Any())
                    {
                        string finalSearchClause = string.Join(" || ", expressions);
                        return(query.Where(finalSearchClause));
                    }
                }
            }



            var completeSearchClauses = new List <string>();

            // For all searchable properties where SearchIsSplitOnSpaces is true,
            // we require that each word in the search terms yields at least one match.
            // This allows search results to become more refined as more words are typed in.
            // For example, when searching on properties (FirstName, LastName) with input "steve steverson",
            // we require that "steve" match either a first name or last name, and "steverson" match a first name or last name
            // of the same records. This will yield people named "steve steverson" or "steverson steve".
            var splitOnStringTermClauses = new List <string>();
            var terms = searchTerm
                        .Split(new string[] { " ", "," }, StringSplitOptions.RemoveEmptyEntries)
                        .Select(term => term.Trim())
                        .Distinct()
                        .Where(term => !string.IsNullOrWhiteSpace(term))
                        .Take(MaxSearchTerms);

            foreach (var termWord in terms)
            {
                var splitOnStringClauses = ClassViewModel
                                           .SearchProperties(ClassViewModel)
                                           .SelectMany(p => p.GetLinqDynamicSearchStatements(Context.User, Context.TimeZone, "it", termWord))
                                           .Where(f => f.property.SearchIsSplitOnSpaces)
                                           .Select(t => t.statement)
                                           .ToList();

                // For the given term word, allow any of the properties (so we join clauses with OR)
                // to match the term word.
                if (splitOnStringClauses.Any())
                {
                    splitOnStringTermClauses.Add("(" + string.Join(" || ", splitOnStringClauses) + ")");
                }
            }
            // Require each "word clause"
            if (splitOnStringTermClauses.Any())
            {
                completeSearchClauses.Add("( " + string.Join(" && ", splitOnStringTermClauses) + " )");
            }



            // For all searchable properties where SearchIsSplitOnSpaces is false,
            // we only require that the entire search term match at least one of these properties.
            var searchClauses = ClassViewModel
                                .SearchProperties(ClassViewModel)
                                .SelectMany(p => p.GetLinqDynamicSearchStatements(Context.User, Context.TimeZone, "it", searchTerm))
                                .Where(f => !f.property.SearchIsSplitOnSpaces)
                                .Select(t => t.statement)
                                .ToList();

            completeSearchClauses.AddRange(searchClauses);


            if (completeSearchClauses.Any())
            {
                string finalSearchClause = string.Join(" || ", completeSearchClauses);
                query = query.Where(finalSearchClause);
            }
            else
            {
                // A search term was specified (we didn't return early from this method),
                // but we didn't find any valid properties to search on (we didn't come up with any clauses).
                // We should therefore return no results since the search term entered can't come up with any results.
                query = query.Where(q => false);
            }

            // Don't put any other code down here. The property:value search handling returns early
            // if it finds a match. If you need code down here, refactor that part.

            return(query);
        }
Esempio n. 12
0
        /// <summary>
        /// Read method,
        /// gets a list of VehicleMakes from Generic Repository,
        /// does sorting, filtering and pagging.
        /// </summary>
        /// <param name="sortParameters">Has 2 properties: Sort and Sort Direction.</param>
        /// <param name="filterParameters">Has 2 properties: Search and MakeId.</param>
        /// <param name="pageParameters">Has 2 properties: Page and PageSize.</param>
        /// <returns>Returns a list of paged, sorted and filtered IVehicleMake.</returns>
        public async Task <IPagedResult <IVehicleMake> > GetVehicleMakesAsync(ISortParameters sortParameters, IFilterParameters filterParameters, IPageParameters pageParameters)
        {
            IQueryable <VehicleMakeEntity> vehicleMakeList;
            PagedResult <IVehicleMake>     PagedVehicleMake = new PagedResult <IVehicleMake>();

            if (!string.IsNullOrEmpty(filterParameters.Search))
            {
                vehicleMakeList = Repository.GetVehiclesAsync().Where(x => x.Abrv.ToUpper() == filterParameters.Search.ToUpper() || x.Name.ToUpper().Contains(filterParameters.Search.ToUpper())).OrderBy(x => x.Id).AsQueryable();
            }
            else
            {
                vehicleMakeList = Repository.GetVehiclesAsync().OrderBy(x => x.Id);
            }
            if (!string.IsNullOrEmpty(sortParameters.Sort))
            {
                if (sortParameters.Sort.ToUpper() == "NAME")
                {
                    vehicleMakeList = vehicleMakeList.OrderBy(x => x.Name).AsQueryable();
                }
                else if (sortParameters.Sort.ToUpper() == "ABRV")
                {
                    vehicleMakeList = vehicleMakeList.OrderBy(x => x.Abrv).AsQueryable();
                }
            }
            else
            {
                vehicleMakeList = vehicleMakeList.OrderBy(x => x.Id).AsQueryable();
            }
            if (sortParameters.SortDirection.ToUpper() == "DESCENDING")
            {
                vehicleMakeList.Reverse();
            }
            if (pageParameters.PageSize != 0)
            {
                int?skipAmount;
                if (pageParameters.Page == 0 || pageParameters.Page == null)
                {
                    skipAmount = 0;
                }
                else
                {
                    skipAmount = (pageParameters.PageSize * (pageParameters.Page - 1));
                }
                var totalNumberOfRecords = vehicleMakeList.Count();
                vehicleMakeList = vehicleMakeList.Skip((int)skipAmount).Take(pageParameters.PageSize).AsQueryable();
                var mod            = totalNumberOfRecords % pageParameters.PageSize;
                var totalPageCount = (totalNumberOfRecords / pageParameters.PageSize) + (mod == 0 ? 0 : 1);
                var Results        = AutoMapper.Mapper.Map <IEnumerable <IVehicleMake> >(vehicleMakeList.ToList());
                PagedVehicleMake.PageNumber         = (int)pageParameters.Page;
                PagedVehicleMake.PageSize           = pageParameters.PageSize;
                PagedVehicleMake.TotalNumberOfPages = totalPageCount;
                if (sortParameters.SortDirection != null)
                {
                    if (sortParameters.SortDirection.ToUpper() == "DESCENDING")
                    {
                        Results = Results.Reverse();
                    }
                }
                PagedVehicleMake.Results = Results;
            }
            else
            {
                PagedVehicleMake.PageNumber         = 0;
                PagedVehicleMake.PageSize           = 0;
                PagedVehicleMake.TotalNumberOfPages = 0;
                PagedVehicleMake.Results            = AutoMapper.Mapper.Map <IEnumerable <IVehicleMake> >(vehicleMakeList.ToList());
            }

            return(PagedVehicleMake);
        }
Esempio n. 13
0
        public async Task <IPagedList <VehicleMakeEntity> > GetVehicleMakesAsync(ISortParameters sort, IFilterParameters filter, IPageParameters pagep)
        {
            //Search
            if (!string.IsNullOrEmpty(filter.Search))
            {
                vehicleMakes = repository.GetAll().Where(s => s.Name.ToUpper().StartsWith(filter.Search.ToUpper())).AsQueryable();
            }
            else
            {
                vehicleMakes = repository.GetAll().AsQueryable();
            }

            //OrderBy
            switch (sort.SortBy?.ToUpper())
            {
            case "NAME":
                vehicleMakes = vehicleMakes.OrderBy(s => s.Name).AsQueryable();
                break;

            case "ID":
                vehicleMakes = vehicleMakes.OrderBy(s => s.Id).AsQueryable();
                break;

            default:
                vehicleMakes = vehicleMakes.OrderBy(s => s.Id).AsQueryable();
                break;
            }
            //ORDER BY DESCENDING
            if (sort.SortOrder?.ToUpper() == "DESC")
            {
                vehicleMakes = vehicleMakes.OrderByDescending(s => s.Name).AsQueryable();
                vehicleMakes = vehicleMakes.OrderByDescending(s => s.Id).AsQueryable();
            }
            ;
            return(vehicleMakes.ToPagedList(pagep.Page, pagep.PageSize));
        }
 public SavitzyGolaySmoothing(IFilterParameters filterParameters)
 {
     this.filterParameters = filterParameters;
     computedCoefficients  = this.filterParameters.Coefficients.Reverse().Concat(this.filterParameters.Coefficients.Skip(1)).ToArray();
 }
Esempio n. 15
0
        public IPagedList <IVehicleMake> GetVehicleMakePaged(ISortParameters sortParameters, IFilterParameters filterParameters, IPageParameters pageParameters)
        {
            var vehicleMakeList = context.VehicleMakes.AsEnumerable();

            switch (sortParameters.Sort)
            {
            case "Name":
                vehicleMakeList = vehicleMakeList.OrderBy(c => c.Name);
                break;

            case "Abrv":
                vehicleMakeList = vehicleMakeList.OrderBy(c => c.Abrv);
                break;

            default:
                vehicleMakeList = vehicleMakeList.OrderBy(c => c.Id);
                break;
            }

            if (!string.IsNullOrEmpty(filterParameters.Search))
            {
                vehicleMakeList = vehicleMakeList.Where(c => c.Name.ToUpper().Contains(filterParameters.Search.ToUpper()));
            }
            if (sortParameters.Direction == "Descending")
            {
                vehicleMakeList = vehicleMakeList.Reverse();
            }
            return(vehicleMakeList.ToPagedList(pageParameters.Page, pageParameters.PageSize));
        }
Esempio n. 16
0
 /// <summary>
 /// Read method,
 /// gets a list of VehicleModels from VehicleModel Repository,
 /// does sorting, filtering and pagging.
 /// </summary>
 /// <param name="sortParameters">Has 2 properties: Sort and Sort Direction.</param>
 /// <param name="filterParameters">Has 2 properties: Search and MakeId.</param>
 /// <param name="pageParameters">Has 2 properties: Page and PageSize.</param>
 /// <returns>Retuns a list of paged, sorted and filtered IVehicleModel.</returns>
 public async Task <IPagedResult <IVehicleModel> > GetVehicleModelsAsync(ISortParameters sortParameters, IFilterParameters filterParameters, IPageParameters pageParameters)
 {
     return(await repository.GetVehicleModelsAsync(sortParameters, filterParameters, pageParameters));
 }
Esempio n. 17
0
        public async Task <IPagedList <VehicleMake> > GetVehicleMakesAsync(ISortParameters sort, IFilterParameters filter, IPageParameters pagep)
        {
            var makeList = await _repository.GetVehicleMakesAsync(sort, filter, pagep);

            var makeVMList = AutoMapper.Mapper.Map <IEnumerable <VehicleMake> >(makeList);

            return(new StaticPagedList <VehicleMake>(makeVMList, makeList.GetMetaData()));
        }
Esempio n. 18
0
 public Expression <Func <T, bool> > ComposeFilterExpressionFromParameters(IFilterParameters parameters)
 {
     return(arg => true);
 }
Esempio n. 19
0
        public Bitmap ApplyFilter(Bitmap image, IFilterParameters filterParameters)
        {
            var parameters = filterParameters as ContrastFilterParameters;
            if(parameters == null)
            {
                throw new ArgumentException();
            }
            int threshold = parameters.Threshold;

            BitmapData sourceData = image.LockBits(new Rectangle(0, 0,
                                        image.Width, image.Height),
                                        ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

            byte[] pixelBuffer = new byte[sourceData.Stride * sourceData.Height];

            Marshal.Copy(sourceData.Scan0, pixelBuffer, 0, pixelBuffer.Length);

            image.UnlockBits(sourceData);

            double contrastLevel = Math.Pow((100.0 + threshold) / 100.0, 2);

            double blue = 0;
            double green = 0;
            double red = 0;

            for (int k = 0; k + 4 < pixelBuffer.Length; k += 4)
            {
                blue = ((((pixelBuffer[k] / 255.0) - 0.5) *
                           contrastLevel) + 0.5) * 255.0;

                green = ((((pixelBuffer[k + 1] / 255.0) - 0.5) *
                            contrastLevel) + 0.5) * 255.0;

                red = ((((pixelBuffer[k + 2] / 255.0) - 0.5) *
                           contrastLevel) + 0.5) * 255.0;

                if (blue > 255)
                { blue = 255; }
                else if (blue < 0)
                { blue = 0; }

                if (green > 255)
                { green = 255; }
                else if (green < 0)
                { green = 0; }

                if (red > 255)
                { red = 255; }
                else if (red < 0)
                { red = 0; }

                pixelBuffer[k] = (byte)blue;
                pixelBuffer[k + 1] = (byte)green;
                pixelBuffer[k + 2] = (byte)red;
            }

            Bitmap resultBitmap = new Bitmap(image.Width, image.Height);

            BitmapData resultData = resultBitmap.LockBits(new Rectangle(0, 0,
                                        resultBitmap.Width, resultBitmap.Height),
                                        ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

            Marshal.Copy(pixelBuffer, 0, resultData.Scan0, pixelBuffer.Length);
            resultBitmap.UnlockBits(resultData);

            return resultBitmap;
        }
Esempio n. 20
0
        public Bitmap ApplyFilter(Bitmap image, IFilterParameters filterParameters)
        {
            var param = filterParameters as GausianFilterParameters;
            if (param == null)
            {
                throw new ArgumentException("Parameters object must implement IFilterParameters");
            }
            var windowSize = (int)Math.Ceiling(param.Sigma * 3);
            var window = InitializeWindow(param.Sigma);

            var img = new LockBitmap(image);
            var dest = new Bitmap(image);
            img.LockBits();
            var destImage = new LockBitmap(dest);
            destImage.LockBits();

            Parallel.For(0, img.Width, x =>
            {
                Color[] tmp = new Color[img.Height];
                for (var y = 0; y < img.Height; y++)
                {
                    var sum = 0.0;
                    var r = 0.0;
                    var g = 0.0;
                    var b = 0.0;
                    for (var i = 0; i < window.Length; i++)
                    {
                        var l = x + i - windowSize;
                        if (l >= 0 && l < img.Width)
                        {
                            var sourceColor = img.GetPixel(l, y);
                            r += sourceColor.R * window[i];
                            g += sourceColor.G * window[i];
                            b += sourceColor.B * window[i];
                            sum += window[i];
                        }
                    }
                    tmp[y] = Color.FromArgb((r / sum).GetValidColorComponent(), (g / sum).GetValidColorComponent(),
                        (b / sum).GetValidColorComponent());
                }
                for (var i = 0; i < img.Height; i++)
                {
                    destImage.SetPixel(x, i, tmp[i]);
                }
            });

            Parallel.For(0, img.Height, y =>
            {
                Color[] tmp = new Color[img.Width];
                for (var x = 0; x < img.Width; x++)
                {
                    var sum = 0.0;
                    var r = 0.0;
                    var g = 0.0;
                    var b = 0.0;
                    for (var i = 0; i < window.Length; i++)
                    {
                        var l = y + i - windowSize;
                        if (l >= 0 && l < img.Height)
                        {
                            var sourceColor = destImage.GetPixel(x, l);
                            r += sourceColor.R * window[i];
                            g += sourceColor.G * window[i];
                            b += sourceColor.B * window[i];
                            sum += window[i];
                        }
                    }
                    tmp[x] = Color.FromArgb((r / sum).GetValidColorComponent(), (g / sum).GetValidColorComponent(),
                        (b / sum).GetValidColorComponent());
                }
                for (var i = 0; i < img.Width; i++)
                {
                    img.SetPixel(i, y, tmp[i]);
                }
            });
            img.UnlockBits();
            destImage.UnlockBits();
            return image;
        }
Esempio n. 21
0
 public IFilter Create(IFilterParameters parameters)
 {
     Debug.Assert(FilterParameters.AcceptsParameters);
     return(_creator(parameters));
 }