Example #1
0
        public static void Run(ref byte[] decomp, int width)
        {
            BitmapData bmpDespeckle;

            if (width == 400)
            {
                bmpDespeckle = bmpDespeckleTop.LockBits(new Rectangle(0, 0, bmpDespeckleTop.Width, bmpDespeckleTop.Height), ImageLockMode.ReadWrite, bmpDespeckleTop.PixelFormat);
            }
            else
            {
                bmpDespeckle = bmpDespeckleBottom.LockBits(new Rectangle(0, 0, bmpDespeckleBottom.Width, bmpDespeckleBottom.Height), ImageLockMode.ReadWrite, bmpDespeckleBottom.PixelFormat);
            }

            Marshal.Copy(decomp, 0, bmpDespeckle.Scan0, decomp.Length);

            if ((Type)UseFilter == Type.AForgeLite)
            {
                // Very close to Magick and faster!
                AForgeFilter.KernelSize  = 3;
                AForgeFilter.ColorFactor = 10;

                AForgeFilter.ApplyInPlace(bmpDespeckle);

                // Don't make a new array for decomp, will make it slow.
                Marshal.Copy(bmpDespeckle.Scan0, decomp, 0, decomp.Length);
            }
            else if ((Type)UseFilter == Type.Magick)
            {
                //Magick is SLOWWWW
                magick = new ImageMagick.MagickImage();

                if (width == 400)
                {
                    magick.Read(bmpDespeckleTop);
                }
                else
                {
                    magick.Read(bmpDespeckleBottom);
                }

                magick.Despeckle();
                decomp = magick.ToByteArray(ImageMagick.MagickFormat.Bgr); //Use in place of bmpData.Scan0, bloody slow

                magick.Dispose();
            }

            if (width == 400)
            {
                bmpDespeckleTop.UnlockBits(bmpDespeckle);
            }
            else
            {
                bmpDespeckleBottom.UnlockBits(bmpDespeckle);
            }
        }
Example #2
0
 private bool AreVisuallyDifferent(Texture2D img1, Texture2D img2, Config config)
 {
     using (ImageMagick.MagickImage s1 = new ImageMagick.MagickImage()) {
         s1.Read(img1.EncodeToJPG(config.screenshotQuality));
         using (ImageMagick.MagickImage s2 = new ImageMagick.MagickImage()) {
             s2.Read(img2.EncodeToJPG(config.screenshotQuality));
             var errorMetric = EnumUtil.Parse <ImageMagick.ErrorMetric>(config.errorMetric);
             var diffValue   = s1.CompareV2(s2, errorMetric, out ImageMagick.MagickImage diffImg);
             if (diffValue < config.maxAllowedDiff)
             {
                 return(false);
             }
             diffImg.Dispose();
         }
     }
     return(true);
 }