Example #1
0
        /// <summary>
        /// Main Jpeg encode
        /// </summary>
        /// <param name="source">source data</param>
        /// <param name="qf">quality factor</param>
        /// <returns>encoded bytes</returns>
        public byte[] Encode(byte[] source, int qf)
        {
            // divide into 8x8
            Divide8x8Block(source);

            // do dct for every 8x8 block
            _blocks.ForEach(block =>
            {
                block     = block.Subtract(128);
                var array = block.ToArray();
                CosineTransform.DCT(array);
                var matrix = Matrix <double> .Build.DenseOfArray(array);
                _dctedBlocks.Add(matrix);
            });

            // do quantization
            _dctedBlocks.ForEach(dctedBlocks =>
            {
                Quantize(dctedBlocks, qf);
                _quantizedBlocks.Add(dctedBlocks);
            });

            // do RLE
            List <RLEBlock> rleBlocks = _rlEncoder.Encode(_quantizedBlocks);

            // construct code word by RLE
            return(Utility.BoolArrayToByteArray(CodeWordEncoder.ConstructCodeWord(rleBlocks)));
        }