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