Skip to content

Commit

Permalink
add validation of label points enumerable before running aggregates o…
Browse files Browse the repository at this point in the history
…n it fixes #1
  • Loading branch information
richclement committed Jan 18, 2016
1 parent 668bc9c commit e85c916
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
7 changes: 6 additions & 1 deletion src/ImageDiff/BitmapComparer.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using ImageDiff.Analyzers;
using ImageDiff.BoundingBoxes;
using ImageDiff.Labelers;
Expand Down Expand Up @@ -66,10 +67,14 @@ private Bitmap CreateImageWithBoundingBoxes(Bitmap secondImage, IEnumerable<Rect
var differenceBitmap = secondImage.Clone() as Bitmap;
if (differenceBitmap == null) throw new Exception("Could not copy secondImage");

var boundingRectangles = boundingBoxes.ToArray();
if (boundingRectangles.Length == 0)
return differenceBitmap;

using (var g = Graphics.FromImage(differenceBitmap))
{
var pen = new Pen(BoundingBoxColor);
foreach (var boundingRectangle in boundingBoxes)
foreach (var boundingRectangle in boundingRectangles)
{
g.DrawRectangle(pen, boundingRectangle);
}
Expand Down
3 changes: 3 additions & 0 deletions src/ImageDiff/BoundingBoxes/SingleBoundingBoxIdentifer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ public IEnumerable<Rectangle> CreateBoundingBoxes(int[,] labelMap)
{
var points = FindLabeledPoints(labelMap);

if (!points.Any())
return new List<Rectangle>();

var minPoint = new Point(points.Min(x => x.X), points.Min(y => y.Y));
var maxPoint = new Point(points.Max(x => x.X), points.Max(y => y.Y));

Expand Down
24 changes: 23 additions & 1 deletion src/ImageDiffTests/BitmapComparerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public void CompareWorksWithNoOptions()
var result = target.Compare(FirstImage, SecondImage);
result.Save(string.Format(OutputFormat, "CompareWorksWithNullOptions"), SecondImage.RawFormat);
}

[Test]
public void CompareWorksWithNullOptions()
{
Expand All @@ -99,6 +99,28 @@ public void CompareWorksWithNullOptions()
result.Save(string.Format(OutputFormat, "CompareWorksWithNullOptions"), SecondImage.RawFormat);
}

[TestCase(AnalyzerTypes.CIE76, BoundingBoxModes.Single, LabelerTypes.Basic)]
[TestCase(AnalyzerTypes.CIE76, BoundingBoxModes.Single, LabelerTypes.ConnectedComponentLabeling)]
[TestCase(AnalyzerTypes.CIE76, BoundingBoxModes.Multiple, LabelerTypes.Basic)]
[TestCase(AnalyzerTypes.CIE76, BoundingBoxModes.Multiple, LabelerTypes.ConnectedComponentLabeling)]
[TestCase(AnalyzerTypes.ExactMatch, BoundingBoxModes.Single, LabelerTypes.Basic)]
[TestCase(AnalyzerTypes.ExactMatch, BoundingBoxModes.Single, LabelerTypes.ConnectedComponentLabeling)]
[TestCase(AnalyzerTypes.ExactMatch, BoundingBoxModes.Multiple, LabelerTypes.Basic)]
[TestCase(AnalyzerTypes.ExactMatch, BoundingBoxModes.Multiple, LabelerTypes.ConnectedComponentLabeling)]
public void CompareWorksWithIdenticalImages(AnalyzerTypes aType, BoundingBoxModes bMode, LabelerTypes lType)
{
var target = new BitmapComparer(new CompareOptions
{
AnalyzerType = aType,
BoundingBoxMode = bMode,
Labeler = lType
});
var result = target.Compare(FirstImage, FirstImage);
result.Save(string.Format(OutputFormat, string.Format("CompareWorksWithIdenticalImages_{0}_{1}_{2}", aType, bMode, lType)),
SecondImage.RawFormat);
}


[Test]
public void ExactMatch_BasicLabeling_SingleBox()
{
Expand Down

0 comments on commit e85c916

Please sign in to comment.