public void Test_Append()
        {
            int width  = 70;
            int height = 46;

            using (IMagickImageCollection collection = new MagickImageCollection())
            {
                ExceptionAssert.Throws <InvalidOperationException>(delegate()
                {
                    collection.AppendHorizontally();
                });

                ExceptionAssert.Throws <InvalidOperationException>(delegate()
                {
                    collection.AppendVertically();
                });

                collection.Read(Files.RoseSparkleGIF);

                Assert.AreEqual(width, collection[0].Width);
                Assert.AreEqual(height, collection[0].Height);

                using (IMagickImage image = collection.AppendHorizontally())
                {
                    Assert.AreEqual(width * 3, image.Width);
                    Assert.AreEqual(height, image.Height);
                }

                using (IMagickImage image = collection.AppendVertically())
                {
                    Assert.AreEqual(width, image.Width);
                    Assert.AreEqual(height * 3, image.Height);
                }
            }
        }
Beispiel #2
0
        public static String BuildAppendHorizontally(List <AvactorInfo> imgs)
        {
            String filepath = String.Empty;

            using (MagickImageCollection images = new MagickImageCollection())
            {
                foreach (var item in imgs)
                {
                    MagickImage second = new MagickImage(item.FilePath);
                    if (item.IsResize)
                    {
                        second.Resize(50, 50);
                    }

                    images.Add(second);
                }

                using (IMagickImage result = images.AppendHorizontally())
                {
                    // Save the result
                    filepath = Path.Combine(TempFolder, DateTime.Now.ToFileTime() + "Horizontally.png");
                    result.Write(filepath);
                }
            }
            return(filepath);
        }
Beispiel #3
0
            public void ShouldDitherWhenSpecifiedInSettings()
            {
                using (IMagickImageCollection colors = new MagickImageCollection())
                {
                    colors.Add(new MagickImage(MagickColors.Red, 1, 1));
                    colors.Add(new MagickImage(MagickColors.Green, 1, 1));

                    using (IMagickImage remapImage = colors.AppendHorizontally())
                    {
                        using (IMagickImageCollection collection = new MagickImageCollection())
                        {
                            collection.Read(Files.RoseSparkleGIF);

                            QuantizeSettings settings = new QuantizeSettings
                            {
                                DitherMethod = DitherMethod.FloydSteinberg,
                            };

                            collection.Map(remapImage, settings);

                            ColorAssert.AreEqual(MagickColors.Red, collection[0], 60, 17);
                            ColorAssert.AreEqual(MagickColors.Green, collection[0], 37, 24);

                            ColorAssert.AreEqual(MagickColors.Red, collection[1], 58, 30);
                            ColorAssert.AreEqual(MagickColors.Green, collection[1], 36, 26);

                            ColorAssert.AreEqual(MagickColors.Red, collection[2], 60, 40);
                            ColorAssert.AreEqual(MagickColors.Green, collection[2], 17, 21);
                        }
                    }
                }
            }
        public void Test_Deconstruct()
        {
            using (IMagickImageCollection collection = new MagickImageCollection())
            {
                ExceptionAssert.Throws <InvalidOperationException>(delegate()
                {
                    collection.Deconstruct();
                });

                collection.Add(new MagickImage(MagickColors.Red, 20, 20));

                using (IMagickImageCollection frames = new MagickImageCollection())
                {
                    frames.Add(new MagickImage(MagickColors.Red, 10, 20));
                    frames.Add(new MagickImage(MagickColors.Purple, 10, 20));

                    collection.Add(frames.AppendHorizontally());
                }

                Assert.AreEqual(20, collection[1].Width);
                Assert.AreEqual(20, collection[1].Height);
                Assert.AreEqual(new MagickGeometry(0, 0, 10, 20), collection[1].Page);
                ColorAssert.AreEqual(MagickColors.Red, collection[1], 3, 3);

                collection.Deconstruct();

                Assert.AreEqual(10, collection[1].Width);
                Assert.AreEqual(20, collection[1].Height);
                Assert.AreEqual(new MagickGeometry(10, 0, 10, 20), collection[1].Page);
                ColorAssert.AreEqual(MagickColors.Purple, collection[1], 3, 3);
            }
        }
        public void Test_Evaluate()
        {
            using (IMagickImageCollection collection = new MagickImageCollection())
            {
                ExceptionAssert.Throws <InvalidOperationException>(delegate()
                {
                    collection.Evaluate(EvaluateOperator.Exponential);
                });

                collection.Add(new MagickImage(MagickColors.Yellow, 40, 10));

                using (IMagickImageCollection frames = new MagickImageCollection())
                {
                    frames.Add(new MagickImage(MagickColors.Green, 10, 10));
                    frames.Add(new MagickImage(MagickColors.White, 10, 10));
                    frames.Add(new MagickImage(MagickColors.Black, 10, 10));
                    frames.Add(new MagickImage(MagickColors.Yellow, 10, 10));

                    collection.Add(frames.AppendHorizontally());
                }

                using (IMagickImage image = collection.Evaluate(EvaluateOperator.Min))
                {
                    ColorAssert.AreEqual(MagickColors.Green, image, 0, 0);
                    ColorAssert.AreEqual(MagickColors.Yellow, image, 10, 0);
                    ColorAssert.AreEqual(MagickColors.Black, image, 20, 0);
                    ColorAssert.AreEqual(MagickColors.Yellow, image, 30, 0);
                }
            }
        }
Beispiel #6
0
        private void MergeImage(string phase, string[] words)
        {
            var position = 1;

            using (MagickImageCollection images = new MagickImageCollection())
            {
                foreach (var line in words)
                {
                    foreach (var word in line)
                    {
                        MagickImage image = new MagickImage($"~/Words/{word}/{word}-{phase}.png");
                        //image.Extent(90, 400, position == 1 ? Gravity.Center : Gravity.South);
                        image.Extent(-5, -90 * position, 90, 400);
                        //image.Resize(500, 350);
                        image.Transparent(new MagickColor("#ffffff"));
                        images.Add(image);
                    }

                    position++;
                }

                using (MagickImage horizontal = images.AppendHorizontally())
                {
                    MagickImage background = new MagickImage("~/Words/background.png");
                    horizontal.Composite(background, CompositeOperator.DstAtop);

                    Directory.CreateDirectory($"{OutputPath}/{FolderName}");
                    horizontal.Write($"{OutputPath}/{FolderName}/{FolderName}-{phase}.png");
                    background.Dispose();
                }
            }
        }
Beispiel #7
0
        public static void ConvertPDFTOneImage()
        {
            MagickReadSettings settings = new MagickReadSettings();

            // Settings the density to 300 dpi will create an image with a better quality
            settings.Density = new Density(300);

            using (MagickImageCollection images = new MagickImageCollection())
            {
                // Add all the pages of the pdf file to the collection
                images.Read(SampleFiles.SnakewarePdf, settings);

                // Create new image that appends all the pages horizontally
                using (IMagickImage horizontal = images.AppendHorizontally())
                {
                    // Save result as a png
                    horizontal.Write(SampleFiles.OutputDirectory + "Snakeware.horizontal.png");
                }

                // Create new image that appends all the pages horizontally
                using (IMagickImage vertical = images.AppendVertically())
                {
                    // Save result as a png
                    vertical.Write(SampleFiles.OutputDirectory + "Snakeware.vertical.png");
                }
            }
        }
Beispiel #8
0
        public static async Task MergeAllDir(int rowLength)
        {
            int counter = 1;

            FileInfo[] files = IOUtils.GetFiles();
            Logger.Log("-> Merging " + files.Length + " images...");
            Program.PreProcessing();

            if (rowLength <= 0)
            {
                rowLength = (int)Math.Sqrt(files.Length);
            }

            MagickImageCollection row  = new MagickImageCollection();
            MagickImageCollection rows = new MagickImageCollection();

            int currImg = 1;

            Logger.Log("Adding images to atlas...");
            foreach (FileInfo file in files)
            {
                Program.ShowProgress("", counter, files.Length);
                MagickImage currentImg = new MagickImage(file);
                Logger.Log("Adding " + Path.GetFileName(currentImg.FileName) + "...", true);
                row.Add(currentImg);

                if (currImg >= rowLength)
                {
                    currImg = 0;                              // Reset counter
                    var mergedRow = row.AppendHorizontally(); // Append
                    rows.Add(mergedRow);
                    row = new MagickImageCollection();        // Reset row
                }

                currImg++;
                await Program.PutTaskDelay();

                counter++;

                if (counter > files.Length && currImg != 0 && row.Count > 0) // Merge the remaining images if we are done, even if they don't fill a row
                {
                    var mergedRow = row.AppendHorizontally();                // Append
                    rows.Add(mergedRow);
                }
            }
            Logger.Log("-> Creating output image... ");
            var result = rows.AppendVertically();

            result.BackgroundColor = new MagickColor("#" + (await Config.Get("backgroundColor")));
            result.Format          = MagickFormat.Png;
            string outpath = Program.currentDir + "-merged.png";

            result.Write(outpath);
            Logger.Log("-> Written merged image to " + outpath);
            Program.PostProcessing(files.Length);
        }
Beispiel #9
0
 public void ShouldThrowExceptionWhenCollectionIsEmpty()
 {
     using (IMagickImageCollection images = new MagickImageCollection())
     {
         ExceptionAssert.Throws <InvalidOperationException>(() =>
         {
             images.AppendHorizontally();
         });
     }
 }
Beispiel #10
0
            private IMagickImage <QuantumType> CreatePalleteImage()
            {
                using (var images = new MagickImageCollection())
                {
                    images.Add(new MagickImage(MagickColors.Red, 1, 1));
                    images.Add(new MagickImage(MagickColors.Blue, 1, 1));
                    images.Add(new MagickImage(MagickColors.Green, 1, 1));

                    return(images.AppendHorizontally());
                }
            }
Beispiel #11
0
 public static IMagickImage MergeImageRow(Dictionary <int, IMagickImage> images)
 {
     using (MagickImageCollection imgCollection = new MagickImageCollection())
     {
         foreach (var image in images)
         {
             imgCollection.Add(new MagickImage(image.Value));
         }
         return(imgCollection.AppendHorizontally());
     }
 }
        public void Build()
        {
            // only stitch the source images for now
            using var images = new MagickImageCollection();
            foreach (var i in SynapseStills)
            {
                var img = new MagickImage(i);
                img.Scale(Constants.SYNAPSE_WIDTH, Constants.SYNAPSE_HEIGHT);
                images.Add(img);
            }

            // stitch horizontally as demonstrated in the assignment example
            using var result = images.AppendHorizontally();
            result.Write($"{OutputBaseName}.png");
        }
Beispiel #13
0
        private void BtnRead_Click(object sender, EventArgs e)
        {
            var dialog = new OpenFileDialog();
            var result = dialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                if (dialog.CheckFileExists)
                {
                    var sw = new Stopwatch();
                    sw.Start();
                    SetLoading(true);
                    Task.Run(async() =>
                    {
                        MagickReadSettings settings = new MagickReadSettings
                        {
                            // Settings the density to 300 dpi will create an image with a better quality
                            //Density = new Density(96)
                        };

                        using (MagickImageCollection images = new MagickImageCollection())
                        {
                            // Add all the pages of the pdf file to the collection
                            images.Read(dialog.OpenFile(), settings);
                            for (int i = 1; i <= images.Count; i++)
                            {
                                //foreach (MagickImage image in images)
                                //{
                                //    using (var stream = new MemoryStream())
                                //    {
                                //        previewBox.Image = image.ToBitmap();
                                //    }
                                //}
                                var image = images.AppendHorizontally();
                                using (var stream = new MemoryStream())
                                {
                                    previewBox.Image = image.ToBitmap();
                                }
                            }
                        }
                    }).ContinueWith(new Action <Task>((t) =>
                    {
                        SetLoading(false);
                        Console.WriteLine(sw.Elapsed);
                    }));
                }
            }
        }
Beispiel #14
0
        public void Build()
        {
            string[] imgs = Directory.GetFiles(InputFolder, INPUT_IMGS);

            // only stitch the source images for now
            using var images = new MagickImageCollection();
            foreach (var i in imgs)
            {
                var img = new MagickImage(i);
                img.Scale(Constants.SYNAPSE_WIDTH, Constants.SYNAPSE_HEIGHT);
                images.Add(img);
            }

            // stitch horizontally as demonstrated in the assignment example
            using var result = images.AppendHorizontally();
            result.Write(OutputFile);
        }
        public void Test_Map()
        {
            using (IMagickImageCollection colors = new MagickImageCollection())
            {
                colors.Add(new MagickImage(MagickColors.Red, 1, 1));
                colors.Add(new MagickImage(MagickColors.Green, 1, 1));

                using (IMagickImage remapImage = colors.AppendHorizontally())
                {
                    using (IMagickImageCollection collection = new MagickImageCollection())
                    {
                        ExceptionAssert.Throws <InvalidOperationException>(delegate()
                        {
                            collection.Map(null);
                        });

                        ExceptionAssert.Throws <InvalidOperationException>(delegate()
                        {
                            collection.Map(remapImage);
                        });

                        collection.Read(Files.RoseSparkleGIF);

                        ExceptionAssert.Throws <ArgumentNullException>(delegate()
                        {
                            collection.Map(null);
                        });

                        QuantizeSettings settings = new QuantizeSettings();
                        settings.DitherMethod = DitherMethod.FloydSteinberg;

                        collection.Map(remapImage, settings);

                        ColorAssert.AreEqual(MagickColors.Red, collection[0], 60, 17);
                        ColorAssert.AreEqual(MagickColors.Green, collection[0], 37, 24);

                        ColorAssert.AreEqual(MagickColors.Red, collection[1], 58, 30);
                        ColorAssert.AreEqual(MagickColors.Green, collection[1], 36, 26);

                        ColorAssert.AreEqual(MagickColors.Red, collection[2], 60, 40);
                        ColorAssert.AreEqual(MagickColors.Green, collection[2], 17, 21);
                    }
                }
            }
        }
        private static void RemapColors(IMagickImage image, IEnumerable <MagickColor> colors)
        {
            using (var images = new MagickImageCollection())
            {
                foreach (var color in colors)
                {
                    images.Add(new MagickImage(color, 1, 1));
                }

                using (IMagickImage colorMap = images.AppendHorizontally())
                {
                    image.Map(colorMap, new QuantizeSettings()
                    {
                        DitherMethod = DitherMethod.No
                    });
                }
            }
        }
Beispiel #17
0
        private ushort[] GetGrayChannel(MagickImage image)
        {
            using (var images = new MagickImageCollection())
            {
                images.Add(image.Clone());
                images.Add(image.Clone());
                images.Add(image.Clone());

                using (var depolar = images.AppendHorizontally())
                {
                    if (Smooth != 0.0)
                    {
                        depolar.Blur(0, Smooth);
                    }

                    if (Sharpen != 0.0)
                    {
                        depolar.Sharpen(0, Sharpen);
                    }

                    if (_method == UnperspectiveMethod.Derivative)
                    {
                        depolar.VirtualPixelMethod = VirtualPixelMethod.Tile;
                        depolar.SetArtifact("convolve:scale", "50%!");
                        depolar.SetArtifact("convolve:bias", "50%");
                        depolar.Morphology(MorphologyMethod.Convolve, "3x1: -1,0,1");
                        depolar.AutoLevel();

                        depolar.SetArtifact("convolve:bias", "0");
                        depolar.Morphology(MorphologyMethod.Convolve, "3x1: 1,0,-1");
                        depolar.AutoLevel();
                        depolar.Crop(image.Width, 1, Gravity.Center);
                    }

                    depolar.Depth = 16;

                    using (var pixels = depolar.GetPixels())
                    {
                        return(pixels.ToShortArray(0, 0, depolar.Width, 1, "R"));
                    }
                }
            }
        }
        public void Combine()
        {
            string[] videoImgs = Directory.GetFiles(
                SynapseFolder, Constants.VIDEO_SYNAPSE_BASENAME + FILE_EXT);
            string[] stillsImgs = Directory.GetFiles(
                SynapseFolder, Constants.STILLS_SYNAPSE_BASENAME + FILE_EXT);
            using var images = new MagickImageCollection();
            foreach (var v in videoImgs)
            {
                images.Add(new MagickImage(v));
            }
            foreach (var s in stillsImgs)
            {
                images.Add(new MagickImage(s));
            }

            using var result = images.AppendHorizontally();
            result.Write(Path.Join(SynapseFolder, "combined_synapse.png"));
        }
Beispiel #19
0
            public void ShouldThrowExceptionWhenCollectionIsEmptyAndImageIsNotNull()
            {
                using (IMagickImageCollection colors = new MagickImageCollection())
                {
                    colors.Add(new MagickImage(MagickColors.Red, 1, 1));
                    colors.Add(new MagickImage(MagickColors.Green, 1, 1));

                    using (IMagickImage remapImage = colors.AppendHorizontally())
                    {
                        using (IMagickImageCollection collection = new MagickImageCollection())
                        {
                            ExceptionAssert.Throws <InvalidOperationException>(() =>
                            {
                                collection.Map(remapImage);
                            });
                        }
                    }
                }
            }
Beispiel #20
0
            public void ShouldAppendTheImagesHorizontally()
            {
                int width  = 70;
                int height = 46;

                using (IMagickImageCollection images = new MagickImageCollection())
                {
                    images.Read(Files.RoseSparkleGIF);

                    Assert.AreEqual(width, images[0].Width);
                    Assert.AreEqual(height, images[0].Height);

                    using (IMagickImage image = images.AppendHorizontally())
                    {
                        Assert.AreEqual(width * 3, image.Width);
                        Assert.AreEqual(height, image.Height);
                    }
                }
            }
Beispiel #21
0
        public static MagickImage MergeImages(string[] imgs, bool vertically, bool deleteSourceImgs)
        {
            MagickImageCollection collection = new MagickImageCollection();

            foreach (string img in imgs)
            {
                collection.Add(img);
                if (deleteSourceImgs)
                {
                    File.Delete(img);
                }
            }

            if (!vertically)
            {
                return((MagickImage)collection.AppendHorizontally());
            }
            else
            {
                return((MagickImage)collection.AppendVertically());
            }
        }
Beispiel #22
0
        public static String BuildSquareImg(List <List <AvactorInfo> > imggroup)
        {
            String result = String.Empty;

            if (imggroup == null || !imggroup.Any())
            {
                return(result);
            }
            using (MagickImageCollection verticallyImages = new MagickImageCollection())
            {
                foreach (var item in imggroup)
                {
                    using (MagickImageCollection images = new MagickImageCollection())
                    {
                        foreach (var hitem in item)
                        {
                            MagickImage first = new MagickImage(hitem.FilePath);
                            first.Resize(hitem.Width, hitem.Heigh);
                            if (hitem.IsResize)
                            {
                                first.BackgroundColor = new MagickColor(Color.Gray);
                            }
                            images.Add(first);
                        }
                        verticallyImages.Add(images.AppendHorizontally());
                    }
                }
                using (IMagickImage vresult = verticallyImages.AppendVertically())
                {
                    // Save the result
                    result = Path.Combine(TempFolder, DateTime.Now.ToFileTime() + ".png");
                    vresult.Write(result);
                }
            }


            return(result);
        }
        private IMagickImage FillImage(IMagickImage magickImage)
        {
            IMagickImage result;

            using (MagickImageCollection images = new MagickImageCollection())
            {
                int blackWidth = (1920 - magickImage.Width) / 2;

                IMagickImage blackLeft  = new MagickImage(blackColor, blackWidth, 1080);;
                IMagickImage blackRight = new MagickImage(blackColor, blackWidth, 1080);;

                images.Add(blackLeft);
                images.Add(magickImage);
                images.Add(blackRight);

                result = images.AppendHorizontally();

                blackLeft.Dispose();
                blackRight.Dispose();
            }
            result.Orientation = OrientationType.TopLeft;
            return(result);
        }
		public void Test_Append()
		{
			int width = 70;
			int height = 46;

			using (MagickImageCollection collection = new MagickImageCollection(Files.RoseSparkleGIF))
			{
				Assert.AreEqual(width, collection[0].Width);
				Assert.AreEqual(height, collection[0].Height);

				using (MagickImage image = collection.AppendHorizontally())
				{
					Assert.AreEqual(width * 3, image.Width);
					Assert.AreEqual(height, image.Height);
				}

				using (MagickImage image = collection.AppendVertically())
				{
					Assert.AreEqual(width, image.Width);
					Assert.AreEqual(height * 3, image.Height);
				}
			}
		}
        public void Test_Append()
        {
            int width  = 70;
            int height = 46;

            using (MagickImageCollection collection = new MagickImageCollection(Files.RoseSparkleGIF))
            {
                Assert.AreEqual(width, collection[0].Width);
                Assert.AreEqual(height, collection[0].Height);

                using (MagickImage image = collection.AppendHorizontally())
                {
                    Assert.AreEqual(width * 3, image.Width);
                    Assert.AreEqual(height, image.Height);
                }

                using (MagickImage image = collection.AppendVertically())
                {
                    Assert.AreEqual(width, image.Width);
                    Assert.AreEqual(height * 3, image.Height);
                }
            }
        }
Beispiel #26
0
        private string GerarImagem(Stream stream)
        {
            MagickNET.SetGhostscriptDirectory(Directory.GetCurrentDirectory());
            MagickNET.SetTempDirectory(Path.GetTempPath());

            var settings = new MagickReadSettings
            {
                Density = new Density(300, 300)
            };

            using (var images = new MagickImageCollection())
            {
                images.Read(stream, settings);

                using (var imagem = images.AppendHorizontally())
                {
                    var caminhoArquivo = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".png");
                    imagem.Format = MagickFormat.Png;
                    imagem.Write(caminhoArquivo);

                    return(caminhoArquivo);
                }
            }
        }
Beispiel #27
0
        public static string CompareScreen()
        {
            try
            {
                logger.Debug("------|Start To Compare Screen");
                finalImageFile = string.Empty;
                string templateName = Template.templateName;

                string baselinePath = InitializeParamter.ImageBaselinePath;
                string imagePath    = baselinePath.Replace("Baseline", "");
                string actualPath   = imagePath + @"Compare\Actual\";
                string diffPath     = imagePath + @"Compare\Diff\";
                CreateDirectory(actualPath);
                CreateDirectory(diffPath);
                string date            = DateTime.Now.ToString("yyyyMMdd");
                string todayActualPath = Path.Combine(actualPath, date);
                string todayDiffPath   = Path.Combine(diffPath, date);
                CreateDirectory(todayActualPath);
                CreateDirectory(todayDiffPath);

                //Define all of the image
                string baselineImageFullName      = Path.Combine(baselinePath, templateName + ".png");
                string actualImageFullName        = Path.Combine(todayActualPath, templateName + ".png");
                string diffImageFullName          = Path.Combine(todayDiffPath, templateName + "_diff.png");
                string firstCombineImageFullName  = Path.Combine(todayDiffPath, templateName + "_diff_Combine1.png"); //baseline + actual
                string secondCombineImageFullName = Path.Combine(todayDiffPath, templateName + "_diff_Combine2.png"); // first + diff
                string finalDiffImageFullName     = Path.Combine(todayDiffPath, templateName + "_diff_final.png");    // second + Watermark

                /*==========1. Get Actual =======================*/
                var        driver = Initialize.Driver;
                Screenshot ss     = ((ITakesScreenshot)driver).GetScreenshot();
                ss.SaveAsFile(actualImageFullName, ImageFormat.Png);
                /*----------1 End--------------------------------*/

                /*==========2. Get Diff =======================*/
                //Temp Solution To Get baseline
                if (!File.Exists(baselineImageFullName))
                {
                    baselineImageFullName = actualImageFullName;
                }
                using (MagickImage mi_actual = new MagickImage(actualImageFullName))
                    using (MagickImage mi_baseline = new MagickImage(baselineImageFullName))
                        using (MagickImage mi_diff = new MagickImage())
                        {
                            double distortion = mi_actual.Compare(mi_baseline, ErrorMetric.Absolute, mi_diff);
                            if (distortion != 0)
                            {
                                mi_diff.Write(diffImageFullName);
                                /*----------2 End--------------------------------*/
                                /*==========3. first Combine:baseline + actual===*/
                                using (MagickImageCollection collection = new MagickImageCollection())
                                {
                                    collection.Add(new MagickImage(baselineImageFullName));
                                    collection.Add(new MagickImage(actualImageFullName));
                                    //MagickGeometry geo = new MagickGeometry("80x80%");
                                    // Create a mosaic from both images
                                    using (MagickImage result = collection.AppendHorizontally())
                                    {
                                        // Save the result
                                        //result.Resize(geo);
                                        //result.Scale(new Percentage(50));
                                        //result.BorderColor = new MagickColor(System.Drawing.Color.Red);
                                        result.Write(firstCombineImageFullName);
                                    }
                                }
                                /*----------3 End--------------------------------*/
                                /*==========4. second Combine:first + diff ======*/
                                using (MagickImageCollection collection = new MagickImageCollection())
                                {
                                    collection.Add(new MagickImage(firstCombineImageFullName));
                                    collection.Add(new MagickImage(diffImageFullName));

                                    //MagickGeometry geo = new MagickGeometry("150x150%");//wightxhight
                                    using (MagickImage result = collection.AppendVertically())
                                    {
                                        //result.Resize(geo);
                                        // Save the result
                                        result.Write(secondCombineImageFullName);
                                    }
                                }
                                /*----------4 End--------------------------------*/
                                /*==========5. final Combine:second + Watermark =*/
                                var imageBackgroundColor = new MagickColor("White");
                                var text = "Left: Baseline\nRight: Actual\nBottom: Different";
                                using (MagickImage image = new MagickImage(secondCombineImageFullName))
                                {
                                    // Read the watermark that will be put on top of the image
                                    using (MagickImage watermark = new MagickImage(imageBackgroundColor, 1000, 600))
                                    {
                                        watermark.Read("label:" + text);
                                        // Draw the watermark in the bottom right corner
                                        image.Composite(watermark, Gravity.Southeast, CompositeOperator.Over);
                                        // Optionally make the watermark more transparent
                                        watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 4);
                                        // Or draw the watermark at a specific location
                                        //image.Composite(watermark, 200, 50, CompositeOperator.Over);
                                    }
                                    // Save the result
                                    image.Write(finalDiffImageFullName);
                                }
                                /*----------5 End--------------------------------*/
                                /*==========6. delete middle diff image==========*/
                                File.Delete(diffImageFullName);
                                File.Delete(firstCombineImageFullName);
                                File.Delete(secondCombineImageFullName);
                                // Rename final.png
                                string time = DateTime.Now.ToString("HHmmss");
                                string renameFinalImageFullName = finalDiffImageFullName.Replace("diff_final", time);
                                File.Move(finalDiffImageFullName, renameFinalImageFullName);
                                finalImageFile = renameFinalImageFullName;
                                /*----------6 End--------------------------------*/
                                return("Failure");
                            }
                            else
                            {
                                return("Pass");
                            }
                        }
            }
            catch (Exception e)
            {
                logger.Fatal("Fail To Compare Screen");
                logger.Fatal(e.Message);
                return("Failure");
            }
        }
Beispiel #28
0
        static void Main(string[] args)
        {
            Console.WriteLine($"# of Threads: {NumThreads}");

            DateTime startTime = DateTime.Now;

            MagickImage original = new MagickImage("sample_images/white.png");

            MagickImage target = new MagickImage("sample_images/target.png");

            List <MagickImage> originalTiles = original.CropToTiles((original.Width / NumThreads) + 1, original.Height).Cast <MagickImage>().ToList();
            List <MagickImage> targetTiles   = target.CropToTiles((original.Width / NumThreads) + 1, original.Height).Cast <MagickImage>().ToList();

            List <MagickImage>[] outputTilesProcessed = new List <MagickImage> [NumThreads];

            //MagickImage working = (MagickImage)original.Clone(original.Width, original.Height);

            Console.WriteLine($"ogT cnt: {originalTiles.Count}, tt cnt: {targetTiles.Count}");

            List <Thread> threads = new List <Thread>();

            DateTime threadStartTime = DateTime.Now;

            for (int i = 0; i < NumThreads; i++)
            {
                int    i_copied = i;
                Thread t        = new Thread(delegate()
                {
                    outputTilesProcessed[i_copied] = ProcessTile(originalTiles[i_copied], targetTiles[i_copied]);
                });

                t.Start();

                threads.Add(t);
            }

            while (!threads.All(t => !t.IsAlive))
            {
                Thread.Sleep(1);
            }

            Console.WriteLine($"Tile process time: {Math.Round((DateTime.Now - threadStartTime).TotalSeconds, 2)} seconds");

            DateTime stitchStartTime = DateTime.Now;

            using (MagickImageCollection gifCollection = new MagickImageCollection())
            {
                for (int i = 0; i < num_frames; i++)
                {
                    using (MagickImageCollection frameCollection = new MagickImageCollection())
                    {
                        for (int j = 0; j < NumThreads; j++)
                        {
                            frameCollection.Add(outputTilesProcessed[j][i]);
                        }

                        gifCollection.Add(frameCollection.AppendHorizontally());

                        gifCollection[i].AnimationDelay = animation_delay;
                    }
                }

                Console.WriteLine($"Stitch time: {Math.Round((DateTime.Now - stitchStartTime).TotalSeconds, 2)} seconds");

                DateTime optimizeWriteStartTime = DateTime.Now;

                gifCollection.Optimize();
                gifCollection.Write("output/output.gif");

                Console.WriteLine($"Optimize and write time: {Math.Round((DateTime.Now - optimizeWriteStartTime).TotalSeconds, 2)} seconds");
            }

            Console.WriteLine($"Done, total elapsed time: {Math.Round((DateTime.Now - startTime).TotalSeconds, 2)} seconds");

            //Gif animation = new Gif("output/output.gif", num_frames);

            /*using (MagickImageCollection collection = new MagickImageCollection())
             * {
             *  collection.Add(working);
             *  collection[0].AnimationDelay = animation_delay;
             *
             *  //collection[0].Write("output/0.png");
             *
             *  for (int i = 1; i < num_frames; i++)
             *  {
             *      DateTime startFrameTime = DateTime.Now;
             *      collection.Add(Method2_Magick((MagickImage)collection[i-1], target));
             *
             *      collection[i].AnimationDelay = animation_delay;
             *
             *      DateTime endFrameTime = DateTime.Now;
             *
             *      Console.WriteLine($"Frame {i}/{num_frames-1} took {Math.Round((endFrameTime - startFrameTime).TotalSeconds, 2)} seconds to render");
             *
             *      //Console.WriteLine($"{i}/{num_frames-1}");
             *
             *
             *      //collection[i].Write($"output/{i}.png");
             *
             *      //working.Save($"output/{(char)i}.png");
             *  }
             *
             *  DateTime startOptimizeAndSave = DateTime.Now;
             *
             *  collection.Optimize();
             *
             *  collection.Write("output/output.gif");
             *
             *  DateTime endOptimizeAndSave = DateTime.Now;
             *
             *  Console.WriteLine($"Optimize + save took {Math.Round((endOptimizeAndSave-startOptimizeAndSave).TotalSeconds, 2)} seconds");
             * }
             *
             * DateTime endTime = DateTime.Now;
             *
             * Console.WriteLine($"Done, total elapsed time: {Math.Round((endTime-startTime).TotalSeconds, 2)} seconds");*/
        }