Я имею дело с файлами CIP3 - это файлы со смешанным содержимым (бинарные \ текстовые).У меня есть файл, данные его изображения сжимаются с помощью фильтра RunLengthDecode (из PostScript) и кодируются с помощью ASCIIHexDecode.
ASCIIHexDecode все в порядке (просто преобразовать двоичный файл в шестнадцатеричный), но я не могу найти приличную RLEАлгоритм декомпрессии.Я искал в Google много, StackOverflow, везде - прежде чем спрашивать.Кто-нибудь может дать мне какой-либо вклад по этому вопросу?
До сих пор я пытался распаковать с помощью этого алгоритма:
public enum EncodingFormat
{
Old,
New,
}
public static class Rle
{
public const char EOF = '\u007F';
public const char ESCAPE = '\\';
private static bool HasChar(StringBuilder input)
{
for (var i = 0; i < input.Length; i++)
{
if (char.IsLetter(input[i]))
{
return true;
}
}
return false;
}
internal static void Decode(string input)
{
int fileCounter = 0;
//var runLengthEncodedString = new StringBuilder();
var baseString = input;
var radix = 0;
for (var i = 0; i < baseString.Length; i++)
{
if (char.IsNumber(baseString[i]))
{
radix++;
}
else
{
if (radix > 0)
{
try
{
var valueRepeat = Convert.ToInt64(baseString.Substring(i - radix, radix));
for (var j = 0; j < valueRepeat; j++)
{
File.AppendAllText(@"C:\test\hexdecoded.txt",baseString[i].ToString());
}
radix = 0;
}
catch(Exception e)
{
var checkI = i;
}
}
else if (radix == 0)
{
File.AppendAllText(@"C:\test\hexdecoded.txt", baseString[i].ToString());
}
}
}
}
internal static double GetPercentage(double x, double y)
{
return (100 * (x - y)) / x;
}
}
Должен сказать, что я нашел этот код в StackOverflow, ноне могу вспомнить, где сейчас.Я изменил вывод содержимого на диск, потому что я получаю ошибку исключения памяти.Но для распаковки моего изображения требуются годы (ждал один час и все еще распаковывал).Если мне удастся исправить распаковку этого образа RLE, я могу преобразовать его в байты и затем создать правильный файл TIFF.
Я загрузил образец файла, который я использую для тестов: CIP3Образец файла
Любой вклад приветствуется.Спасибо.