Exemplo n.º 1
0
        private void ProcessSendImage(ImageComparerClient imageComparerClient, BinaryReader reader, BinaryWriter binaryWriter)
        {
            var receivedImage = new TestResultServerImage(imageComparerClient);

            // Read image header
            receivedImage.ClientImage.Read(reader);

            Console.WriteLine(@"Receiving {0} from {1}", receivedImage.ClientImage.TestName, imageComparerClient.Connection.Serial);

            // Compute paths
            var goldPath = Path.Combine(baseOutputPath, receivedImage.GetGoldDirectory());
            var outputPath = Path.Combine(baseOutputPath, receivedImage.GetOutputDirectory());

            receivedImage.GoldPath = goldPath;
            receivedImage.OutputPath = outputPath;
            receivedImage.JsonPath = Path.Combine(baseOutputPath, "json");

            Directory.CreateDirectory(receivedImage.GoldPath);
            Directory.CreateDirectory(receivedImage.OutputPath);
            Directory.CreateDirectory(receivedImage.JsonPath);

            receivedImage.GoldFileName = Path.Combine(goldPath, receivedImage.GetFileName());
            receivedImage.ResultFileName = Path.Combine(outputPath, receivedImage.GetFileName());
            receivedImage.DiffFileName = Path.Combine(outputPath, receivedImage.GetDiffFileName());
            receivedImage.DiffNormFileName = Path.Combine(outputPath, receivedImage.GetNormDiffFileName());

            // Seems like image magick doesn't like to read from UNC path (size is OK but not data?)
            // Let's use temp path to do most of the work before copying
            var resultTempFileName = Path.GetTempPath() + Guid.NewGuid() + ".png";
            try
            {
                // Read image data
                using (var image = receivedImage.ClientImage.Image)
                using (var resultFileStream = File.OpenWrite(resultTempFileName))
                {
                    image.Save(resultFileStream, ImageFileType.Png);
                }

                CompareImage(receivedImage, resultTempFileName);
            }
            finally
            {
                File.Delete(resultTempFileName);
            }

            var receivedImages = imageComparerClient.Images;
            List<TestResultServerImage> receivedImageForThisTest;
            lock (receivedImages)
            {
                if (!receivedImages.TryGetValue(receivedImage.ClientImage.TestName, out receivedImageForThisTest))
                {
                    receivedImageForThisTest = new List<TestResultServerImage>();
                    receivedImage.FrameIndex = receivedImageForThisTest.Count;
                    receivedImages.Add(receivedImage.ClientImage.TestName, receivedImageForThisTest);
                }
            }

            receivedImageForThisTest.Add(receivedImage);

            // Send ack
            binaryWriter.Write(true);
        }
Exemplo n.º 2
0
        private void ProcessSendImage(ImageComparerClient imageComparerClient, BinaryReader reader, BinaryWriter binaryWriter)
        {
            var receivedImage = new TestResultServerImage(imageComparerClient);

            // Read image header
            receivedImage.ClientImage.Read(reader);

            Console.WriteLine(@"Receiving {0} from {1}", receivedImage.ClientImage.TestName, imageComparerClient.Connection.Serial);

            // Compute paths
            var goldPath   = Path.Combine(baseOutputPath, receivedImage.GetGoldDirectory());
            var outputPath = Path.Combine(baseOutputPath, receivedImage.GetOutputDirectory());

            receivedImage.GoldPath   = goldPath;
            receivedImage.OutputPath = outputPath;
            receivedImage.JsonPath   = Path.Combine(baseOutputPath, "json");

            Directory.CreateDirectory(receivedImage.GoldPath);
            Directory.CreateDirectory(receivedImage.OutputPath);
            Directory.CreateDirectory(receivedImage.JsonPath);

            receivedImage.GoldFileName     = Path.Combine(goldPath, receivedImage.GetFileName());
            receivedImage.ResultFileName   = Path.Combine(outputPath, receivedImage.GetFileName());
            receivedImage.DiffFileName     = Path.Combine(outputPath, receivedImage.GetDiffFileName());
            receivedImage.DiffNormFileName = Path.Combine(outputPath, receivedImage.GetNormDiffFileName());

            // Seems like image magick doesn't like to read from UNC path (size is OK but not data?)
            // Let's use temp path to do most of the work before copying
            var resultTempFileName = Path.GetTempPath() + Guid.NewGuid() + ".png";

            try
            {
                // Read image data
                using (var image = receivedImage.ClientImage.Image)
                    using (var resultFileStream = File.OpenWrite(resultTempFileName))
                    {
                        image.Save(resultFileStream, ImageFileType.Png);
                    }

                CompareImage(receivedImage, resultTempFileName);
            }
            finally
            {
                File.Delete(resultTempFileName);
            }

            var receivedImages = imageComparerClient.Images;
            List <TestResultServerImage> receivedImageForThisTest;

            lock (receivedImages)
            {
                if (!receivedImages.TryGetValue(receivedImage.ClientImage.TestName, out receivedImageForThisTest))
                {
                    receivedImageForThisTest = new List <TestResultServerImage>();
                    receivedImage.FrameIndex = receivedImageForThisTest.Count;
                    receivedImages.Add(receivedImage.ClientImage.TestName, receivedImageForThisTest);
                }
            }

            receivedImageForThisTest.Add(receivedImage);

            // Send ack
            binaryWriter.Write(true);
        }