Beispiel #1
1
    public void Test_Image_ByteArray()
    {
      using (Image img = Image.FromFile(Files.Coders.PageTIF))
      {
        byte[] bytes = null;
        using (MemoryStream memStream = new MemoryStream())
        {
          img.Save(memStream, ImageFormat.Tiff);
          bytes = memStream.GetBuffer();
        }

        using (MagickImage image = new MagickImage(bytes))
        {
          image.CompressionMethod = CompressionMethod.Group4;

          using (MemoryStream memStream = new MemoryStream())
          {
            image.Write(memStream);
            memStream.Position = 0;

            using (MagickImage before = new MagickImage(Files.Coders.PageTIF))
            {
              using (MagickImage after = new MagickImage(memStream))
              {
                Assert.AreEqual(0.0, before.Compare(after, ErrorMetric.RootMeanSquared));
              }
            }
          }
        }
      }
    }
    private static void Test_Clone_Area(MagickImage area, MagickImage part)
    {
      Assert.AreEqual(area.Width, part.Width);
      Assert.AreEqual(area.Height, part.Height);

      Assert.AreEqual(0.0, area.Compare(part, ErrorMetric.RootMeanSquared));
    }
Beispiel #3
0
        public void CompareImages([CallerMemberName] string testName = "")
        {
            string expectedPath = Path.Combine(testDirectory, testName + ".expected.png");
            string actualPath = Path.Combine(testDirectory, testName + ".wpf.out.png");
            MagickImage expected = new MagickImage(expectedPath);
            MagickImage actual = new MagickImage(actualPath);
            MagickErrorInfo error = expected.Compare(actual);

            Assert.IsNull(error);
        }
Beispiel #4
0
        protected void CompareImages([CallerMemberName] string testName = "")
        {
            string expectedPath = Path.Combine(OutputPath, testName + ".expected.png");
            string actualPath = Path.Combine(OutputPath, testName + ".out.png");
            MagickImage expected = new MagickImage(expectedPath);
            MagickImage actual = new MagickImage(actualPath);
            double error = expected.Compare(actual, ErrorMetric.RootMeanSquared);

            if (error > 0.022)
            {
                Assert.True(false, actualPath + ": Error = " + error);
            }
        }
        public double Compare(MagickImage leftImage, MagickImage rightImage, out MagickImage diffImage)
        {
            // See:
            // [1] https://stackoverflow.com/questions/5132749/diff-an-image-using-imagemagick
            // [2] https://stackoverflow.com/questions/20582620/how-to-compare-2-images-ignoring-areas#26584462

            // resize image to the same size - ImageMagick requires both images to be of the same size
            rightImage.Crop(leftImage.BaseWidth, leftImage.BaseHeight);

            // apply the mask to the screenshot
            rightImage.Composite(leftImage, CompositeOperator.DstIn);

            // compare masked screenshot against reference image
            diffImage = new MagickImage();
            return rightImage.Compare(leftImage, ErrorMetric.Absolute, diffImage);
        }
Beispiel #6
0
        public void CompareImages([CallerMemberName] string testName = "")
        {
            string expectedPath = Path.Combine(testDirectory, testName + ".expected.png");
            string actualPath = Path.Combine(testDirectory, testName + ".avalonia.out.png");
            MagickImage expected = new MagickImage(expectedPath);
            MagickImage actual = new MagickImage(actualPath);
            MagickErrorInfo error = expected.Compare(actual);

            if (error != null)
            {
                if (error.NormalizedMaximumError > 0.15)
                {
                    Assert.Fail("NormalizedMaximumError = " + error.NormalizedMaximumError);
                }
                else
                {
                    Assert.Inconclusive("Close but no cigar.");
                }
            }
        }
        public void saveResult(string FilePath1, string FilePath2, string outFilePath)
        {
            MagickImageCollection images = new MagickImageCollection();
            // Add the first image
            MagickImage first = new MagickImage(FilePath1);

             //   images.Add(first);

            // Add the second image
            MagickImage second = new MagickImage(FilePath2);
               // images.Add(second);

            /*
            first.Composite(second, 0, 0, CompositeOperator.ModulusAdd);
            first.Write(outFilePath + "compos.png");

            */
            MagickImage third = new MagickImage();
            first.Compare(second, ErrorMetric.Absolute, third);
            third.Write(outFilePath + "third.bmp");
        }
    public void Test_GaussianBlur()
    {
      using (MagickImage gaussian = new MagickImage(Files.Builtin.Wizard))
      {
        gaussian.GaussianBlur(5.5, 10.2);

        using (MagickImage blur = new MagickImage(Files.Builtin.Wizard))
        {
          blur.Blur(5.5, 10.2);

          double distortion = blur.Compare(gaussian, ErrorMetric.RootMeanSquared);
#if Q8
          Assert.AreEqual(0.00066, distortion, 0.00001);
#elif Q16
          Assert.AreEqual(0.0000033, distortion, 0.0000001);
#elif Q16HDRI
          Assert.AreEqual(0.0000011, distortion, 0.0000001);
#else
#error Not implemented!
#endif
        }
      }
    }
    public void Test_Composite_ChangeMask()
    {
      using (MagickImage background = new MagickImage("xc:red", 100, 100))
      {
        background.BackgroundColor = Color.White;
        background.Extent(200, 100);

        IDrawable[] drawables = new IDrawable[]
        {
          new DrawablePointSize(50),
          new DrawableText(135, 70, "X")
        };

        using (MagickImage image = background.Clone())
        {
          image.Draw(drawables);
          image.Composite(background, Gravity.Center, CompositeOperator.ChangeMask);

          using (MagickImage result = new MagickImage(MagickColor.Transparent, 200, 100))
          {
            result.Draw(drawables);
            Assert.AreEqual(0.073, result.Compare(image, ErrorMetric.RootMeanSquared), 0.001);
          }
        }
      }
    }
    public void Test_Compare()
    {
      MagickImage first = new MagickImage(Files.SnakewarePNG);
      MagickImage second = first.Clone();

      MagickErrorInfo same = first.Compare(second);
      Assert.IsNotNull(same);
      Assert.AreEqual(0, same.MeanErrorPerPixel);

      double distortion = first.Compare(second, ErrorMetric.Absolute);
      Assert.AreEqual(0, distortion);

      first.Threshold(new Percentage(50));
      MagickErrorInfo different = first.Compare(second);
      Assert.IsNotNull(different);
      Assert.AreNotEqual(0, different.MeanErrorPerPixel);

      distortion = first.Compare(second, ErrorMetric.Absolute);
      Assert.AreNotEqual(0, distortion);

      MagickImage difference = new MagickImage();
      distortion = first.Compare(second, ErrorMetric.RootMeanSquared, difference);
      Assert.AreNotEqual(0, distortion);
      Assert.AreNotEqual(first, difference);
      Assert.AreNotEqual(second, difference);
    }
Beispiel #11
0
    public void Test_Compare()
    {
      MagickImage first = new MagickImage(Files.ImageMagickJPG);

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        first.Compare(null);
      });

      MagickImage second = first.Clone();

      MagickErrorInfo same = first.Compare(second);
      Assert.IsNotNull(same);
      Assert.AreEqual(0, same.MeanErrorPerPixel);

      double distortion = first.Compare(second, ErrorMetric.Absolute);
      Assert.AreEqual(0, distortion);

      first.Threshold(new Percentage(50));
      MagickErrorInfo different = first.Compare(second);
      Assert.IsNotNull(different);
      Assert.AreNotEqual(0, different.MeanErrorPerPixel);

      distortion = first.Compare(second, ErrorMetric.Absolute);
      Assert.AreNotEqual(0, distortion);

      MagickImage difference = new MagickImage();
      distortion = first.Compare(second, ErrorMetric.RootMeanSquared, difference);
      Assert.AreNotEqual(0, distortion);
      Assert.AreNotEqual(first, difference);
      Assert.AreNotEqual(second, difference);

      second.Dispose();

      first.Opaque(MagickColors.Black, MagickColors.Green);
      first.Opaque(MagickColors.White, MagickColors.Green);

      second = first.Clone();
      second.FloodFill(MagickColors.Gray, 0, 0);

      distortion = first.Compare(second, ErrorMetric.Absolute, Channels.Green);
      Assert.AreEqual(0, distortion);

      distortion = first.Compare(second, ErrorMetric.Absolute, Channels.Red);
      Assert.AreNotEqual(0, distortion);
    }
Beispiel #12
0
    public void Test_LevelColors()
    {
      using (MagickImage image = new MagickImage(Files.MagickNETIconPNG))
      {
        image.LevelColors(MagickColors.Fuchsia, MagickColors.Goldenrod);
        ColorAssert.AreEqual(new MagickColor("#ffffbed24bc3fffa"), image, 42, 75);
        ColorAssert.AreEqual(new MagickColor("#ffffffff0809"), image, 62, 75);
      }

      using (MagickImage first = new MagickImage(Files.MagickNETIconPNG))
      {
        first.LevelColors(MagickColors.Fuchsia, MagickColors.Goldenrod, Channels.Blue);
        first.InverseLevelColors(MagickColors.Fuchsia, MagickColors.Goldenrod, Channels.Blue);
        first.Alpha(AlphaOption.Background);

        using (MagickImage second = new MagickImage(Files.MagickNETIconPNG))
        {
          second.Alpha(AlphaOption.Background);
#if Q8
          Assert.AreEqual(0.0, first.Compare(second, ErrorMetric.RootMeanSquared));
#elif Q16 || Q16HDRI
          Assert.AreEqual(0.0, 0.00000001, first.Compare(second, ErrorMetric.RootMeanSquared));
#else
#error Not implemented!
#endif
        }
      }
    }
Beispiel #13
0
        public double saveResult(MagickImage StandartIM, MagickImage CurrentIM, string outFilePath, string outCurFilePath)
        {
            MagickImage resultImage = new MagickImage();
            var compareResult = StandartIM.Compare(CurrentIM, ErrorMetric.Absolute, resultImage);

            if (compareResult != 0)
            {
                CreateScreenDirectory(Path.GetDirectoryName(outFilePath));
                CreateScreenDirectory(Path.GetDirectoryName(outCurFilePath));
                resultImage.Write(outFilePath);
                CurrentIM.Write(outCurFilePath);
                Console.Out.WriteLine("Погрешность= " + compareResult + " Изображения не совпадают" + outFilePath);

            }
            else
            {
                Console.Out.WriteLine("Изображения совпадают");

            }
            return compareResult;
        }
Beispiel #14
0
    public void Test_RandomSeed()
    {
      using (MagickImage first = new MagickImage("plasma:red", 10, 10))
      {
        using (MagickImage second = new MagickImage("plasma:red", 10, 10))
        {
          Assert.AreNotEqual(0.0, first.Compare(second, ErrorMetric.RootMeanSquared));
        }
      }

      MagickNET.SetRandomSeed(1337);

      using (MagickImage first = new MagickImage("plasma:red", 10, 10))
      {
        using (MagickImage second = new MagickImage("plasma:red", 10, 10))
        {
          Assert.AreEqual(0.0, first.Compare(second, ErrorMetric.RootMeanSquared));
        }
      }
    }
Beispiel #15
0
    public void Test_Sharpen()
    {
      using (MagickImage image = new MagickImage(Files.NoisePNG))
      {
        image.Sharpen(10, 20);
        image.Clamp();

        using (MagickImage original = new MagickImage(Files.NoisePNG))
        {
          Assert.AreEqual(0.06675, image.Compare(original, ErrorMetric.RootMeanSquared), 0.00001);
        }
      }
    }
Beispiel #16
0
    public void Test_SigmoidalContrast()
    {
      using (MagickImage image = new MagickImage(Files.NoisePNG))
      {
        image.SigmoidalContrast(true, 8.0);

        using (MagickImage original = new MagickImage(Files.NoisePNG))
        {
          Assert.AreEqual(0.07361, original.Compare(image, ErrorMetric.RootMeanSquared), 0.00001);
        }
      }
    }
Beispiel #17
0
    public void Test_SelectiveBlur()
    {
      using (MagickImage image = new MagickImage(Files.NoisePNG))
      {
        image.SelectiveBlur(5.0, 2.0, Quantum.Max / 2);

        using (MagickImage original = new MagickImage(Files.NoisePNG))
        {
          Assert.AreEqual(0.07777, original.Compare(image, ErrorMetric.RootMeanSquared), 0.00002);
        }
      }
    }
Beispiel #18
0
    public void Test_Read()
    {
      MagickImage image = new MagickImage();

      ExceptionAssert.Throws<ArgumentException>(delegate ()
      {
        image.Read(new byte[0]);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        image.Read((byte[])null);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        image.Read((Stream)null);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        image.Read((string)null);
      });

      ExceptionAssert.Throws<ArgumentException>(delegate ()
      {
        image.Read(Files.Missing);
      });

      ExceptionAssert.Throws<ArgumentException>(delegate ()
      {
        image.Read("png:" + Files.Missing);
      });

      image.Read(File.ReadAllBytes(Files.SnakewarePNG));
      Assert.AreEqual(286, image.Width);
      Assert.AreEqual(67, image.Height);

      using (FileStream fs = File.OpenRead(Files.SnakewarePNG))
      {
        image.Read(fs);
        Assert.AreEqual(286, image.Width);
        Assert.AreEqual(67, image.Height);
        Assert.AreEqual(MagickFormat.Png, image.Format);
      }

      image.Read(Files.SnakewarePNG);
      Assert.AreEqual(286, image.Width);
      Assert.AreEqual(67, image.Height);
      Assert.AreEqual(MagickFormat.Png, image.Format);

      image.Read(Files.Builtin.Rose);
      Assert.AreEqual(70, image.Width);
      Assert.AreEqual(46, image.Height);
      Assert.AreEqual(MagickFormat.Ppm, image.Format);

      image.Read(Files.RoseSparkleGIF);
      Assert.AreEqual("RöseSparkle.gif", Path.GetFileName(image.FileName));
      Assert.AreEqual(70, image.Width);
      Assert.AreEqual(46, image.Height);
      Assert.AreEqual(MagickFormat.Gif, image.Format);

      image.Read("png:" + Files.SnakewarePNG);
      Assert.AreEqual(286, image.Width);
      Assert.AreEqual(67, image.Height);
      Assert.AreEqual(MagickFormat.Png, image.Format);

      MagickColor red = new MagickColor("red");

      image.Read(red, 50, 50);
      Assert.AreEqual(50, image.Width);
      Assert.AreEqual(50, image.Height);
      ColorAssert.AreEqual(red, image, 10, 10);

      image.Read("xc:red", 50, 50);
      Assert.AreEqual(50, image.Width);
      Assert.AreEqual(50, image.Height);
      ColorAssert.AreEqual(red, image, 5, 5);

      using (FileStream fs = File.OpenRead(Files.ImageMagickJPG))
      {
        image.Read(fs);

        fs.Position = 0;
        using (FakePartialStream fakeStream = new FakePartialStream(fs))
        {
          using (MagickImage testImage = new MagickImage())
          {
            testImage.Read(fakeStream);

            Assert.AreEqual(image.Width, testImage.Width);
            Assert.AreEqual(image.Height, testImage.Height);
            Assert.AreEqual(image.Format, testImage.Format);
            Assert.AreEqual(0.0, image.Compare(testImage, ErrorMetric.RootMeanSquared));
          }
        }
      }

      image.Dispose();

      ExceptionAssert.Throws<ObjectDisposedException>(delegate ()
      {
        image.BackgroundColor = MagickColors.PaleGreen;
      });
    }
Beispiel #19
0
    public void Test_MotionBlur()
    {
      using (MagickImage motionBlurred = new MagickImage(Files.Builtin.Logo))
      {
        motionBlurred.MotionBlur(4.0, 5.4, 10.6);

        using (MagickImage original = new MagickImage(Files.Builtin.Logo))
        {
          Assert.AreEqual(0.11019, motionBlurred.Compare(original, ErrorMetric.RootMeanSquared), 0.00001);
        }
      }
    }
    public void Test_Level()
    {
      using (MagickImage first = new MagickImage(Files.MagickNETIconPNG))
      {
        first.Level(new Percentage(50.0), new Percentage(10.0));

        using (MagickImage second = new MagickImage(Files.MagickNETIconPNG))
        {
          Assert.AreNotEqual(first, second);
          Assert.AreNotEqual(first.Signature, second.Signature);

          second.Level((QuantumType)(Quantum.Max * 0.5), (QuantumType)(Quantum.Max * 0.1));

          Assert.AreEqual(0.0, first.Compare(second, ErrorMetric.RootMeanSquared));

          Assert.AreEqual(first, second);
          Assert.AreEqual(first.Signature, second.Signature);
        }
      }
    }
Beispiel #21
0
    public void Test_Stegano()
    {
      using (MagickImage message = new MagickImage("label:Magick.NET is the best!", 200, 20))
      {
        using (MagickImage image = new MagickImage(Files.Builtin.Wizard))
        {
          image.Stegano(message);

          FileInfo tempFile = new FileInfo(Path.GetTempFileName() + ".png");

          try
          {
            image.Write(tempFile);

            MagickReadSettings settings = new MagickReadSettings();
            settings.Format = MagickFormat.Stegano;
            settings.Width = 200;
            settings.Height = 20;

            using (MagickImage hiddenMessage = new MagickImage(tempFile, settings))
            {
              Assert.AreEqual(0, message.Compare(hiddenMessage, ErrorMetric.RootMeanSquared));
            }
          }
          finally
          {
            if (tempFile.Exists)
              tempFile.Delete();
          }
        }
      }
    }
Beispiel #22
0
    public void Test_Enhance()
    {
      using (MagickImage enhanced = new MagickImage(Files.NoisePNG))
      {
        enhanced.Enhance();

        using (MagickImage original = new MagickImage(Files.NoisePNG))
        {
          Assert.AreEqual(0.0115, enhanced.Compare(original, ErrorMetric.RootMeanSquared), 0.0003);
        }
      }
    }
Beispiel #23
0
    public void Test_UnsharpMask()
    {
      using (MagickImage image = new MagickImage(Files.NoisePNG))
      {
        image.UnsharpMask(7.0, 3.0);

        using (MagickImage original = new MagickImage(Files.NoisePNG))
        {
#if Q8 || Q16
          Assert.AreEqual(0.06476, original.Compare(image, ErrorMetric.RootMeanSquared), 0.00002);
#elif Q16HDRI
          Assert.AreEqual(0.10234, original.Compare(image, ErrorMetric.RootMeanSquared), 0.00001);
#else
#error Not implemented!
#endif
        }
      }
    }
Beispiel #24
0
    public void Test_Contrast()
    {
      using (MagickImage first = new MagickImage(Files.Builtin.Wizard))
      {
        first.Contrast(true);
        first.Contrast(false);

        using (MagickImage second = new MagickImage(Files.Builtin.Wizard))
        {
          Assert.AreEqual(0.003, 0.0001, first.Compare(second, ErrorMetric.RootMeanSquared));
        }
      }
    }
Beispiel #25
0
    public void Test_Wave()
    {
      using (MagickImage image = new MagickImage(Files.TestPNG))
      {
        image.Wave();

        using (MagickImage original = new MagickImage(Files.TestPNG))
        {
#if Q8
          Assert.AreEqual(0.63104, original.Compare(image, ErrorMetric.RootMeanSquared), 0.00001);
#elif Q16 || Q16HDRI
          Assert.AreEqual(0.63109, original.Compare(image, ErrorMetric.RootMeanSquared), 0.00001);
#else
#error Not implemented!
#endif
        }
      }
    }
Beispiel #26
0
    public void Test_Spread()
    {
      using (MagickImage image = new MagickImage(Files.FujiFilmFinePixS1ProJPG))
      {
        image.Spread(10);

        using (MagickImage original = new MagickImage(Files.FujiFilmFinePixS1ProJPG))
        {
          Assert.AreEqual(0.121, original.Compare(image, ErrorMetric.RootMeanSquared), 0.002);
        }
      }
    }
Beispiel #27
0
    public void Test_Level()
    {
      using (MagickImage first = new MagickImage(Files.MagickNETIconPNG))
      {
        first.Level(new Percentage(50.0), new Percentage(10.0));

        using (MagickImage second = new MagickImage(Files.MagickNETIconPNG))
        {
          Assert.AreNotEqual(first, second);
          Assert.AreNotEqual(first.Signature, second.Signature);

          QuantumType fifty = (QuantumType)(Quantum.Max * 0.5);
          QuantumType ten = (QuantumType)(Quantum.Max * 0.1);
          second.Level(fifty, ten, Channels.Red);
          second.Level(fifty, ten, Channels.Green | Channels.Blue);
          second.Level(fifty, ten, Channels.Alpha);

          Assert.AreEqual(0.0, first.Compare(second, ErrorMetric.RootMeanSquared));

          Assert.AreEqual(first, second);
          Assert.AreEqual(first.Signature, second.Signature);
        }
      }

      using (MagickImage first = new MagickImage(Files.MagickNETIconPNG))
      {
        first.InverseLevel(new Percentage(50.0), new Percentage(10.0));

        using (MagickImage second = new MagickImage(Files.MagickNETIconPNG))
        {
          Assert.AreNotEqual(first, second);
          Assert.AreNotEqual(first.Signature, second.Signature);

          QuantumType fifty = (QuantumType)(Quantum.Max * 0.5);
          QuantumType ten = (QuantumType)(Quantum.Max * 0.1);
          second.InverseLevel(fifty, ten, Channels.Red);
          second.InverseLevel(fifty, ten, Channels.Green | Channels.Blue);
          second.InverseLevel(fifty, ten, Channels.Alpha);

          Assert.AreEqual(0.0, first.Compare(second, ErrorMetric.RootMeanSquared));

          Assert.AreEqual(first, second);
          Assert.AreEqual(first.Signature, second.Signature);
        }
      }
    }