private void applyParameters(CompressionParameters parameters) { Debug.Assert(parameters is object); ClassicCompressor.SmoothingFactor = parameters.SmoothingFactor; ClassicCompressor.JpegSetQuality(parameters.Quality, true); if (parameters.SimpleProgressive) { ClassicCompressor.JpegSimpleProgression(); } }
#pragma warning disable IDE1006 // Naming Styles private void applyParameters(CompressionParameters parameters) #pragma warning restore IDE1006 // Naming Styles { Debug.Assert(parameters is object); ClassicCompressor.SmoothingFactor = parameters.SmoothingFactor; ClassicCompressor.JpegSetQuality(parameters.Quality, true); if (parameters.SimpleProgressive) { ClassicCompressor.JpegSimpleProgression(); } }
/// <summary> /// Compresses any image described as ICompressSource to JPEG /// </summary> /// <param name="source">Contains description of input image</param> /// <param name="output">Stream for output of compressed JPEG</param> public void Compress(IRawImage source, Stream output) { if (source is null) { throw new ArgumentNullException(nameof(source)); } if (output is null) { throw new ArgumentNullException(nameof(output)); } ClassicCompressor.Image_width = source.Width; ClassicCompressor.Image_height = source.Height; ClassicCompressor.In_color_space = (JColorSpace)source.Colorspace; ClassicCompressor.Input_components = source.ComponentsPerPixel; //m_compressor.Data_precision = source.DataPrecision; ClassicCompressor.JpegSetDefaults(); //we need to set density parameters after setting of default jpeg parameters //m_compressor.Density_unit = source.DensityUnit; //m_compressor.X_density = (short)source.DensityX; //m_compressor.Y_density = (short)source.DensityY; applyParameters(m_compressionParameters); // Specify data destination for compression ClassicCompressor.JpegStdioDest(output); // Start compression ClassicCompressor.JpegStartCompression(true); // Process pixels source.BeginRead(); while (ClassicCompressor.Next_scanline < ClassicCompressor.Image_height) { var row = source.GetPixelRow(); var rowForDecompressor = new byte[1][]; rowForDecompressor[0] = row ?? throw new InvalidDataException("Row of pixels is null"); ClassicCompressor.JpegWriteScanlines(rowForDecompressor, 1); } source.EndRead(); // Finish compression and release memory ClassicCompressor.JpegFinishCompress(); }