private byte[] DecodeBlocks(JBLOCK[][][] coefficients, int length)
        {
            using (var ms = new MemoryStream())
            {
                for (var i = 0; i < length / BytesPerBlock + 1; i++)
                {
                    var d = DecodeBlock(JpegHelper.GetBlock(coefficients, i));
                    ms.Write(d, 0, d.Length);
                }

                return(ms.GetBuffer().Take(length).ToArray());
            }
        }
        private byte[] Decrypt(JBLOCK[][][] coefficients, int length)
        {
            var res = new byte[length];

            for (var i = 0; i < length; i++)
            {
                for (var j = 0; j < 8; j++)
                {
                    var block = JpegHelper.GetBlock(coefficients, i * 8 + j);
                    BitHelper.SetBit(ref res[i], j, DecryptShort(block[0]));
                }
            }

            return(res);
        }
        private void Encrypt(JBLOCK[][][] coefficients, byte[] data)
        {
            var l = JpegHelper.GetLength(coefficients);

            Console.Out.WriteLine($"Capacity = {l / 8}");

            Console.Out.WriteLine("Used = {0}", data.Length);

            for (var i = 0; i < data.Length; i++)
            {
                for (var j = 0; j < 8; j++)
                {
                    var block = JpegHelper.GetBlock(coefficients, i * 8 + j);
                    block[0] = EncryptShort(block[0], BitHelper.GetBit(data[i], j));
                }
            }
        }
        private void EncodeBlocks(JBLOCK[][][] coefficients, byte[] data)
        {
            var l = JpegHelper.GetLength(coefficients);

            Console.Out.WriteLine($"Capacity = {l * BytesPerBlock}");

            EnforcePadding(data, BytesPerBlock);
            Console.Out.WriteLine("Used = {0}", data.Length);

            for (var i = 0; i < data.Length / BytesPerBlock; i++)
            {
                var block = JpegHelper.GetBlock(coefficients, i);
                EncodeBlock(block, data.Skip(i * BytesPerBlock).Take(BytesPerBlock).ToArray());

                if (i % 100 == 0)
                {
                    Console.WriteLine($"{i} bytes encrypted");
                }
            }
        }