/// <Архівування> /// Виконання архівування за допомогою алгоритму 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(); }