public void DecodeImage(IDownSampler downSampler, QuantizeMethod quantizeMethod, int quantizeParameter)
        {
            GetQuantizeds(quantizeMethod, quantizeParameter, out var quantizedY, out var quantizedCb, out var quantizedCr);

            var iQuantizedY  = new double[256, 256];
            var iQuantizedCb = new double[128, 128];
            var iQuantizedCr = new double[128, 128];

            if (quantizeMethod == QuantizeMethod.ZigZag)
            {
                iQuantizedY  = quantizedY.GetIQuantizeUsingZigZagMethod(quantizeParameter);
                iQuantizedCb = quantizedCb.GetIQuantizeUsingZigZagMethod(quantizeParameter);
                iQuantizedCr = quantizedCr.GetIQuantizeUsingZigZagMethod(quantizeParameter);
            }

            if (quantizeMethod == QuantizeMethod.Method2)
            {
                iQuantizedY  = quantizedY.GetIQuantizeUsingMethod2(quantizeParameter);
                iQuantizedCb = quantizedCb.GetIQuantizeUsingMethod2(quantizeParameter);
                iQuantizedCr = quantizedCr.GetIQuantizeUsingMethod2(quantizeParameter);
            }

            if (quantizeMethod == QuantizeMethod.JpegQuality)
            {
                iQuantizedY  = quantizedY.GetIQuantizeUsingJpegQualityMethod(quantizeParameter);
                iQuantizedCb = quantizedCb.GetIQuantizeUsingJpegQualityMethod(quantizeParameter);
                iQuantizedCr = quantizedCr.GetIQuantizeUsingJpegQualityMethod(quantizeParameter);
            }

            var iDctY  = dct.GetIDiscreteCosineTransform(iQuantizedY);
            var iDctCb = dct.GetIDiscreteCosineTransform(iQuantizedCb);
            var iDctCr = dct.GetIDiscreteCosineTransform(iQuantizedCr);

            var upSampledCb = downSampler.GetUpSampledMatrix(iDctCb);
            var upSampledCr = downSampler.GetUpSampledMatrix(iDctCr);

            var yCbCrPixels = new YCbCrPixel[256, 256];

            for (int i = 0; i < 256; i++)
            {
                for (int j = 0; j < 256; j++)
                {
                    yCbCrPixels[i, j] = new YCbCrPixel
                    {
                        Y  = (byte)iDctY[i, j],
                        Cb = (byte)upSampledCb[i, j],
                        Cr = (byte)upSampledCr[i, j]
                    };
                }
            }

            ReconstructedImage = GetBitmapFromYCbCrPixels(yCbCrPixels);
        }
示例#2
0
        public void Setup()
        {
            var dependencyResolver = new DependencyResolver();

            jpegEncoder = (JpegEncoder)dependencyResolver.GetObject <IJpegEncoder>();
            downSampler = new DownSampler411();

            filePathSource      = $"{Environment.CurrentDirectory}\\temp.bmp";
            filePathEncodedFile = $"{Environment.CurrentDirectory}\\temp.bmp.pre";
            filePathDecodedFile = $"{Environment.CurrentDirectory}\\temp.png.pre.jpg";

            TestMethods.CopyFileAndReplaceIfAlreadyExists($"{Environment.CurrentDirectory}\\Images\\TestImage1.bmp", filePathSource);
        }
        public void EncodeImage(IFileReader fileReader, IDownSampler downSampler)
        {
            GetImageFromFileReader(fileReader);

            var pixels = GetYCbCrPixelsFromImage(OriginalImage);

            GetMatrices(pixels, out var yMatrix, out var cbMatrix, out var crMatrix);

            var downSampledCbMatrix = downSampler.GetDownSampledMatrix(cbMatrix);
            var downSampledCrMatrix = downSampler.GetDownSampledMatrix(crMatrix);

            DctY  = dct.GetDiscreteCosineTransform(yMatrix);
            DctCb = dct.GetDiscreteCosineTransform(downSampledCbMatrix);
            DctCr = dct.GetDiscreteCosineTransform(downSampledCrMatrix);
        }