Пример #1
0
        public void TestCompareCompressedPicture()
        {
            using (var imageStream1 = TestImage.Flora.GetStream())
                using (var bmp1 = (Bitmap)Image.FromStream(imageStream1))
                    using (var imageStream2 = TestImage.FloraCompressed.GetStream())
                        using (var bmp2 = (Bitmap)Image.FromStream(imageStream2))
                        {
                            var hash1 = BitmapHash.Compute(bmp1);
                            var hash2 = BitmapHash.Compute(bmp2);

                            var diff = BinaryUtils.ComputeByteArrayEquality(hash1, hash2);
                            Assert.True(diff > 0.9);
                        }
        }
Пример #2
0
        public float Compare(HashContext context, Hash bitmapHash)
        {
            var colorData   = bitmapHash.HashData.AsSpan(32);
            var colorFactor = ComputeColorFactor(colorData, context.ColorData.Span);

            var bitmapHashData = bitmapHash.HashData.AsSpan(0, 32);

            float bestSimilarity = 0;

            foreach (var variant in context.Variants)
            {
                var similarity = BinaryUtils.ComputeByteArrayEquality(variant.Span, bitmapHashData);
                bestSimilarity = Math.Max(bestSimilarity, similarity);
            }

            return(bestSimilarity * colorFactor);
        }