Ejemplo n.º 1
0
        public void WorkingBufferSizeHintInBytes_IsAppliedCorrectly <TPixel>(
            TestImageProvider <TPixel> provider,
            int workingBufferLimitInRows)
            where TPixel : struct, IPixel <TPixel>
        {
            using (Image <TPixel> image0 = provider.GetImage())
            {
                Size destSize = image0.Size() / 4;

                var configuration = Configuration.CreateDefaultInstance();

                int workingBufferSizeHintInBytes = workingBufferLimitInRows * destSize.Width * SizeOfVector4;
                var allocator = new TestMemoryAllocator();
                configuration.MemoryAllocator = allocator;
                configuration.WorkingBufferSizeHintInBytes = workingBufferSizeHintInBytes;

                var verticalKernelMap = ResizeKernelMap.Calculate(
                    KnownResamplers.Bicubic,
                    destSize.Height,
                    image0.Height,
                    Configuration.Default.MemoryAllocator);
                int minimumWorkerAllocationInBytes = verticalKernelMap.MaxDiameter * 2 * destSize.Width * SizeOfVector4;
                verticalKernelMap.Dispose();

                using (Image <TPixel> image = image0.Clone(configuration))
                {
                    image.Mutate(x => x.Resize(destSize, KnownResamplers.Bicubic, false));

                    image.DebugSave(
                        provider,
                        testOutputDetails: workingBufferLimitInRows,
                        appendPixelTypeToFileName: false);
                    image.CompareToReferenceOutput(
                        ImageComparer.TolerantPercentage(0.001f),
                        provider,
                        testOutputDetails: workingBufferLimitInRows,
                        appendPixelTypeToFileName: false);

                    Assert.NotEmpty(allocator.AllocationLog);

                    int maxAllocationSize = allocator.AllocationLog.Where(
                        e => e.ElementType == typeof(Vector4)).Max(e => e.LengthInBytes);

                    Assert.True(maxAllocationSize <= Math.Max(workingBufferSizeHintInBytes, minimumWorkerAllocationInBytes));
                }
            }
        }
Ejemplo n.º 2
0
        private void VerifyKernelMapContentIsCorrect(string resamplerName, int srcSize, int destSize)
        {
            IResampler resampler = TestUtils.GetResampler(resamplerName);

            var referenceMap = ReferenceKernelMap.Calculate(resampler, destSize, srcSize);
            var kernelMap    = ResizeKernelMap.Calculate(resampler, destSize, srcSize, Configuration.Default.MemoryAllocator);



#if DEBUG
            this.Output.WriteLine(kernelMap.Info);
            this.Output.WriteLine($"Expected KernelMap:\n{PrintKernelMap(referenceMap)}\n");
            this.Output.WriteLine($"Actual KernelMap:\n{PrintKernelMap(kernelMap)}\n");
#endif
            var comparer = new ApproximateFloatComparer(1e-6f);

            for (int i = 0; i < kernelMap.DestinationLength; i++)
            {
                ResizeKernel kernel = kernelMap.GetKernel(i);

                ReferenceKernel referenceKernel = referenceMap.GetKernel(i);

                Assert.True(
                    referenceKernel.Length == kernel.Length,
                    $"referenceKernel.Length != kernel.Length: {referenceKernel.Length} != {kernel.Length}");
                Assert.True(
                    referenceKernel.Left == kernel.StartIndex,
                    $"referenceKernel.Left != kernel.Left: {referenceKernel.Left} != {kernel.StartIndex}");
                float[]      expectedValues = referenceKernel.Values;
                Span <float> actualValues   = kernel.Values;

                Assert.Equal(expectedValues.Length, actualValues.Length);



                for (int x = 0; x < expectedValues.Length; x++)
                {
                    Assert.True(
                        comparer.Equals(expectedValues[x], actualValues[x]),
                        $"{expectedValues[x]} != {actualValues[x]} @ (Row:{i}, Col:{x})");
                }
            }
        }
Ejemplo n.º 3
0
 private static string PrintKernelMap(ResizeKernelMap kernelMap)
 => PrintKernelMap(kernelMap, km => km.DestinationLength, (km, i) => km.GetKernel(i));