Beispiel #1
0
        private void CalculateRectanglesOfDifferences(ComparableBitmap[] bitmap1, ComparableBitmap[] bitmap2)
        {
            if ((bitmap1 == null) || (bitmap2 == null))
            {
                return;
            }

            List <RectanglesWithSimilarity> rectangles = new List <RectanglesWithSimilarity>();
            float similarity;

            for (int i = 0; i < bitmap1.Length; i++)
            {
                if (_highlightStop)
                {
                    return;
                }
                similarity = Comparator.Similarity(bitmap1[i].GrayscaleData, bitmap2[i].GrayscaleData);
                if (similarity < m_options.resultsOptions.DifferenceThreshold)
                {
                    rectangles.Add(new RectanglesWithSimilarity(bitmap1[i].Rect, similarity));
                }
            }

            if (m_options.resultsOptions.NotHighlightIfFragmentsMoreThan && rectangles.Count > m_options.resultsOptions.NotHighlightMaxFragments)
            {
                return;
            }

            if (!m_options.resultsOptions.HighlightAllDifferences)
            {
                if (HighlightCompleteEvent != null)
                {
                    rectangles.Sort(delegate(RectanglesWithSimilarity a, RectanglesWithSimilarity b)
                    {
                        return(a.similarity.CompareTo(b.similarity));
                    });
                    RectanglesWithSimilarity[] src = rectangles.ToArray();
                    List <Rectangle>           dst = new List <Rectangle>();
                    for (int i = 0, n = Math.Min(src.Length, m_options.resultsOptions.MaxFragmentsForHighlight); i < n; ++i)
                    {
                        dst.Add(src[i].rectangle);
                    }
                    HighlightCompleteEvent(dst);
                }
            }

            if (HighlightCompleteEvent != null)
            {
                RectanglesWithSimilarity[] src = rectangles.ToArray();
                List <Rectangle>           dst = new List <Rectangle>();
                for (int i = 0; i < src.Length; ++i)
                {
                    dst.Add(src[i].rectangle);
                }
                HighlightCompleteEvent(dst);
            }
        }
        private void CalculateRectanglesOfDifferences(ComparableBitmap[] bitmap1, ComparableBitmap[] bitmap2)
        {
            if ((bitmap1 == null) || (bitmap2 == null))
            {
                return;
            }

            List <RectanglesWithSimilarity> rectangles = new List <RectanglesWithSimilarity>();
            float similarity;

            for (int i = 0; i < bitmap1.Length; i++)
            {
                if (_highlightStop)
                {
                    return;
                }
                similarity = Comparator.Similarity(bitmap1[i].GrayscaleData, bitmap2[i].GrayscaleData);
                if (similarity < m_options.resultsOptions.DifferenceThreshold)
                {
                    rectangles.Add(new RectanglesWithSimilarity(bitmap1[i].Rect, similarity));
                }
            }

            if (m_options.resultsOptions.NotHighlightIfFragmentsMoreThan && rectangles.Count > m_options.resultsOptions.NotHighlightMaxFragments)
            {
                return;
            }

            if (!m_options.resultsOptions.HighlightAllDifferences)
            {
                if (HighlightCompleteEvent != null)
                {
                    HighlightCompleteEvent((from rect in rectangles
                                            orderby rect.similarity descending
                                            select rect.rectangle).Take(m_options.resultsOptions.MaxFragmentsForHighlight).ToList());
                }
            }

            if (HighlightCompleteEvent != null)
            {
                HighlightCompleteEvent((from rect in rectangles
                                        select rect.rectangle).ToList());
            }
        }