Exemplo n.º 1
0
        /// <summary>
        /// Asserts that the bitmap matches the image in the specified file.
        /// </summary>
        /// <param name="filename">The filename of the image to match against the bitmap.</param>
        public void ShouldMatch(String filename)
        {
            var machineName = UltravioletTestFramework.GetSanitizedMachineName();

            Directory.CreateDirectory(machineName);

            var expected = (Bitmap)Image.FromFile(filename);

            var filenameNoExtension = Path.GetFileNameWithoutExtension(filename);

            var filenameExpected = Path.ChangeExtension(filenameNoExtension + "_Expected", "png");

            SaveBitmap(expected, Path.Combine(machineName, filenameExpected));

            var filenameActual = Path.ChangeExtension(filenameNoExtension + "_Actual", "png");

            SaveBitmap(bitmap, Path.Combine(machineName, filenameActual));

            if (expected.Width != bitmap.Width || expected.Height != bitmap.Height)
            {
                Assert.Fail("Images do not match due to differing dimensions");
            }

            var mismatchesFound    = 0;
            var mismatchesRequired = (Int32)((bitmap.Width * bitmap.Height) * threshold);

            using (var diff = new Bitmap(expected.Width, expected.Height))
            {
                // Ignore pixels that are within about 1% of the expected value.
                const Int32 PixelDiffThreshold = 2;

                for (int y = 0; y < expected.Height; y++)
                {
                    for (int x = 0; x < expected.Width; x++)
                    {
                        var pixelExpected = expected.GetPixel(x, y);
                        var pixelActual   = bitmap.GetPixel(x, y);

                        var diffR = Math.Abs(pixelExpected.R + pixelActual.R - 2 * Math.Min(pixelExpected.R, pixelActual.R));
                        var diffG = Math.Abs(pixelExpected.G + pixelActual.G - 2 * Math.Min(pixelExpected.G, pixelActual.G));
                        var diffB = Math.Abs(pixelExpected.B + pixelActual.B - 2 * Math.Min(pixelExpected.B, pixelActual.B));

                        if (diffR > PixelDiffThreshold || diffG > PixelDiffThreshold || diffB > PixelDiffThreshold)
                        {
                            mismatchesFound++;
                        }

                        diff.SetPixel(x, y, System.Drawing.Color.FromArgb(255, diffR, diffG, diffB));
                    }
                }

                var filenameDiff = Path.ChangeExtension(filenameNoExtension + "_Diff", "png");
                SaveBitmap(diff, Path.Combine(machineName, filenameDiff));

                if (mismatchesFound > mismatchesRequired)
                {
                    Assert.Fail("Images do not match");
                }
            }
        }
Exemplo n.º 2
0
    public void SetUp()
    {
        Environment.CurrentDirectory = TestContext.CurrentContext.WorkDirectory;

        try
        {
            var imageDir = Path.Combine(Environment.CurrentDirectory, UltravioletTestFramework.GetSanitizedMachineName());
            foreach (var image in Directory.GetFiles(imageDir, "*.png"))
            {
                File.Delete(image);
            }
        }
        catch (DirectoryNotFoundException) { }

        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    }