BitMiracle.LibJpeg.Classic.jpeg_compress_struct.jpeg_finish_compress C# (CSharp) Method

jpeg_finish_compress() public method

Finishes JPEG compression.
If a multipass operating mode was selected, this may do a great deal of work including most of the actual output.
public jpeg_finish_compress ( ) : void
return void
        public void jpeg_finish_compress()
        {
            int iMCU_row;

            if (m_global_state == JpegState.CSTATE_SCANNING || m_global_state == JpegState.CSTATE_RAW_OK)
            {
                /* Terminate first pass */
                if (m_next_scanline < m_image_height)
                    ERREXIT(J_MESSAGE_CODE.JERR_TOO_LITTLE_DATA);
                m_master.finish_pass();
            }
            else if (m_global_state != JpegState.CSTATE_WRCOEFS)
                ERREXIT(J_MESSAGE_CODE.JERR_BAD_STATE, (int)m_global_state);

            /* Perform any remaining passes */
            while (!m_master.IsLastPass())
            {
                m_master.prepare_for_pass();
                for (iMCU_row = 0; iMCU_row < m_total_iMCU_rows; iMCU_row++)
                {
                    if (m_progress != null)
                    {
                        m_progress.Pass_counter = iMCU_row;
                        m_progress.Pass_limit = m_total_iMCU_rows;
                        m_progress.Updated();
                    }

                    /* We bypass the main controller and invoke coef controller directly;
                    * all work is being done from the coefficient buffer.
                    */
                    if (!m_coef.compress_data(null))
                        ERREXIT(J_MESSAGE_CODE.JERR_CANT_SUSPEND);
                }

                m_master.finish_pass();
            }

            /* Write EOI, do final cleanup */
            m_marker.write_file_trailer();
            m_dest.term_destination();

            /* We can use jpeg_abort to release memory and reset global_state */
            jpeg_abort();
        }

Usage Example

        private static void compress(Stream input, CompressOptions options, Stream output)
        {
            Debug.Assert(input != null);
            Debug.Assert(options != null);
            Debug.Assert(output != null);

            jpeg_compress_struct cinfo = new jpeg_compress_struct(new cd_jpeg_error_mgr());

            /* Initialize JPEG parameters.
             * Much of this may be overridden later.
             * In particular, we don't yet know the input file's color space,
             * but we need to provide some value for jpeg_set_defaults() to work.
             */
            cinfo.In_color_space = J_COLOR_SPACE.JCS_RGB; /* arbitrary guess */
            cinfo.jpeg_set_defaults();

            /* Figure out the input file format, and set up to read it. */
            cjpeg_source_struct src_mgr = new bmp_source_struct(cinfo);
            src_mgr.input_file = input;

            /* Read the input file header to obtain file size & colorspace. */
            src_mgr.start_input();

            /* Now that we know input colorspace, fix colorspace-dependent defaults */
            cinfo.jpeg_default_colorspace();

            /* Adjust default compression parameters */
            if (!applyOptions(cinfo, options))
                return;

            /* Specify data destination for compression */
            cinfo.jpeg_stdio_dest(output);

            /* Start compressor */
            cinfo.jpeg_start_compress(true);

            /* Process data */
            while (cinfo.Next_scanline < cinfo.Image_height)
            {
                int num_scanlines = src_mgr.get_pixel_rows();
                cinfo.jpeg_write_scanlines(src_mgr.buffer, num_scanlines);
            }

            /* Finish compression and release memory */
            src_mgr.finish_input();
            cinfo.jpeg_finish_compress();

            /* All done. */
            if (cinfo.Err.Num_warnings != 0)
                Console.WriteLine("Corrupt-data warning count is not zero");
        }
All Usage Examples Of BitMiracle.LibJpeg.Classic.jpeg_compress_struct::jpeg_finish_compress