Example #1
0
        /// <summary>
        /// Decompresses JPEG image to any image described as ICompressDestination
        /// </summary>
        /// <param name="jpeg">Stream with JPEG data</param>
        /// <param name="destination">Stream for output of compressed JPEG</param>
        public void Decompress(Stream jpeg, IDecompressDestination destination)
        {
            if (jpeg is null)
            {
                throw new ArgumentNullException(nameof(jpeg));
            }

            if (destination is null)
            {
                throw new ArgumentNullException(nameof(destination));
            }

            beforeDecompress(jpeg);

            // Start decompression
            ClassicDecompressor.JpegStartDecompress();

            var parameters = getImageParametersFromDecompressor();

            destination.SetImageAttributes(parameters);
            destination.BeginWrite();

            /* Process data */
            while (ClassicDecompressor.Output_scanline < ClassicDecompressor.Output_height)
            {
                var row = JpegCommonStruct.AllocJpegSamples(ClassicDecompressor.Output_width * ClassicDecompressor.Output_components, 1);
                ClassicDecompressor.JpegReadScanlines(row, 1);
                destination.ProcessPixelsRow(row[0]);
            }

            destination.EndWrite();

            // Finish decompression and release memory.
            ClassicDecompressor.JpegFinishDecompress();
        }
Example #2
0
        /// <summary>
        /// Tunes decompressor
        /// </summary>
        /// <param name="jpeg">Stream with input compressed JPEG data</param>
        private void beforeDecompress(Stream jpeg)
        {
            ClassicDecompressor.JpegStdioSrc(jpeg);
            /* Read file header, set default decompression parameters */
            ClassicDecompressor.JpegReadHeader(true);

            applyParameters(m_decompressionParameters);
            ClassicDecompressor.JpegCalcOutputDimensions();
        }
Example #3
0
        /// <summary>
        /// Tunes decompressor
        /// </summary>
        /// <param name="jpeg">Stream with input compressed JPEG data</param>
#pragma warning disable IDE1006 // Naming Styles
        private void beforeDecompress(Stream jpeg)
#pragma warning restore IDE1006 // Naming Styles
        {
            ClassicDecompressor.JpegStdioSrc(jpeg);
            /* Read file header, set default decompression parameters */
            ClassicDecompressor.JpegReadHeader(true);

            applyParameters(m_decompressionParameters);
            ClassicDecompressor.JpegCalcOutputDimensions();
        }