public void GetColoursTest() { ReportStart(); _bitmap = RandomBitmap.Create(new Size(100, 100), 20, PixelFormat.Format32bppArgb); Collection <Color> expectedColours = new Collection <Color>(); for (int y = 0; y < _bitmap.Height; y++) { for (int x = 0; x < _bitmap.Width; x++) { expectedColours.Add(_bitmap.GetPixel(x, y)); } } Color[] actualColours = ImageTools.GetColours(_bitmap); Assert.AreEqual(expectedColours.Count, actualColours.Length); for (int i = 0; i < expectedColours.Count; i++) { ColourAssert.AreEqual(expectedColours[i], actualColours[i], "Index " + i); } ReportEnd(); }
public void GetRgbCollectionTest() { ReportStart(); _bitmap = RandomBitmap.Create(new Size(50, 50), 10, PixelFormat.Format32bppArgb); Color[] colours = ImageTools.GetColours(_bitmap); int len = colours.Length; byte[] exected = new byte[len * 3]; int rgbIndex; for (int colourIndex = 0; colourIndex < len; colourIndex++) { rgbIndex = colourIndex * 3; exected[rgbIndex] = (byte)colours[colourIndex].R; exected[rgbIndex + 1] = (byte)colours[colourIndex].G; exected[rgbIndex + 2] = (byte)colours[colourIndex].B; } Collection <byte> actual = ImageTools.GetRgbCollection(colours); Assert.AreEqual(exected.Length, actual.Count); for (int i = 0; i < exected.Length; i++) { Assert.AreEqual(actual[i], exected[i], "Index " + i); } ReportEnd(); }
public void GetDistinctColoursTest() { ReportStart(); _bitmap = RandomBitmap.Create(new Size(50, 50), 10, PixelFormat.Format32bppArgb); Collection <Color> expectedDistinctColours = new Collection <Color>(); Color c; for (int y = 0; y < _bitmap.Height; y++) { for (int x = 0; x < _bitmap.Width; x++) { c = _bitmap.GetPixel(x, y); if (expectedDistinctColours.Contains(c) == false) { expectedDistinctColours.Add(c); } } } Color[] actualColours = ImageTools.GetColours(_bitmap); Collection <Color> actualDistinctColours = ImageTools.GetDistinctColours(actualColours); Assert.AreEqual(expectedDistinctColours.Count, actualDistinctColours.Count); // NB we can't compare expected[i] to actual[i] as the two collections // are in different orders due to the use of Hashtable in the // GetDistinctColours method foreach (Color thisColour in expectedDistinctColours) { CollectionAssert.Contains(actualDistinctColours, thisColour, thisColour.ToString()); } ReportEnd(); }
public void GetRgbSpeedComparisonTest() { ReportStart(); _bitmap = RandomBitmap.Create(new Size(1000, 1000), 100, PixelFormat.Format32bppArgb); _bitmap.Save("GetRgbSpeedComparisonTest.bmp"); Color[] colours = ImageTools.GetColours(_bitmap); DateTime startTime; DateTime endTime; startTime = DateTime.Now; Collection <byte> rgbCollection = ImageTools.GetRgbCollection(colours); endTime = DateTime.Now; TimeSpan collectionRunTime = endTime - startTime; WriteMessage("GetRgbCollection took " + collectionRunTime); startTime = DateTime.Now; byte[] rgbArray = ImageTools.GetRgbArray(colours); endTime = DateTime.Now; TimeSpan arrayRunTime = endTime - startTime; WriteMessage("GetRgbArray took " + arrayRunTime); // GetRgbArray should be quicker than GetRgbCollection. If not then // there's probably something wrong with GetRgbArray Assert.IsTrue(arrayRunTime < collectionRunTime); Assert.AreEqual(rgbCollection.Count, rgbArray.Length); for (int i = 0; i < rgbCollection.Count; i++) { string colourName; int remainder; int quotient = Math.DivRem(i, 3, out remainder); switch (remainder) { case 0: colourName = "red"; break; case 1: colourName = "green"; break; case 2: colourName = "blue"; break; default: throw new InvalidOperationException("unexpected remainder: " + remainder); } string message = "Index: " + i + ", pixel " + quotient + " (" + colourName + ")"; Assert.AreEqual(rgbCollection[i], rgbArray[i], message); } ReportEnd(); }