Пример #1
0
        /// <Архівування>
        /// Виконання архівування за допомогою алгоритму RLE (Кодування повторів).
        /// </Архівування>
        /// <param name="source">Масив даних</param>
        public static void Compress(ref byte[] source)
        {
            int offset = 0;
            Encoder(ref source, ref offset);

            int size = source.Length;
            List<byte> tmpSource = new List<byte>();
            List<byte> tmpCount = new List<byte>();
            /*
             int count = 0;

             for (int i = 0; i < size - 1; i++)
             {
                 if (!source[i].Equals(source[i + 1]))
                 {
                     tmpSource.Add(source[i]);
                     tmpCount.Add((byte)count);
                     count = 0;
                 }
                 count++;
             }
             tmpSource.Add(source[size - 1]);
             tmpCount.Add(Convert.ToByte(count));

             tmpSource.AddRange(tmpCount);*/

            RLE rleEncode = new RLE();
            source = rleEncode.EncodeData(source);

            tmpSource.AddRange(source);
            // Запис індексу оригінального рядку.
            byte[] tmpOffset = BitConverter.GetBytes((ushort)offset);
            tmpSource.AddRange(tmpOffset);

            source = tmpSource.ToArray();
        }