Я задал аналогичный вопрос несколько месяцев назад по следующей ссылке: ">Создание кода для распаковки байтового RLE-изображения
И я также прочитал этот вопрос (был ближе к моему): Извлечь растровое изображение из PostScript а>
Я имею дело с файлами CIP3, которые в основном представляют собой файлы PostScript с несколькими дополнительными элементами. Важными здесь являются: Матрица изображения Ширина/высота изображения Данные изображения
Данные изображения представляют собой данные, закодированные RLE, и у меня есть код для декодирования RLE из вопроса, который я задал несколько месяцев назад. Код работает, я проверил его на некоторых файлах примеров, которые у меня есть.
Однако взгляните на эту таблицу:
У меня все работает только в случаях 1 и 2. Однако, когда дело доходит до чтения «справа налево» или «снизу вверх», я не могу заставить его работать.
Я пробовал: Функция LINQ Reverse() - по-прежнему создает недопустимое изображение. Переверните массив байтов с помощью обычного цикла for - недопустимое изображение также. Переверните файл после его декодирования - недопустимое изображение.
Это код для декодирования изображения RLE:
class RLEDecompressor
{
public byte[] rleDecompressed { get; private set; }
public RLEDecompressor(byte[] byteFile)
{
List<byte> final = new List<byte>();
int i = 0;
while (i < byteFile.Length)
{
try
{
var lengthByte = byteFile[i++]; //First run, position 1
if (lengthByte <= 127)
{
int currLen = lengthByte + 1;
for (int j = 0; j < currLen; j++)
final.Add(byteFile[i++]);
}
else
{
int currLen = 257 - lengthByte;
byte byteToCopy = byteFile[i++];
for (int j = 0; j < currLen; j++)
final.Add(byteToCopy);
}
}
catch (Exception ex)
{
rleDecompressed = final.ToArray();
break;
}
}
rleDecompressed = final.ToArray();
}
Я ожидал, что вывод будет допустимым изображением. Однако все результаты, которые я получил, были размытыми изображениями или «чем-то еще» (недействительным изображением).
Я предоставляю образец файла, который я пытаюсь декодировать. Ссылка: https://drive.google.com/open?id=1iTSyCKTzXGPyONejXnw28KEDacjIpBUl&fbclid=IwAR2DujV_eYBA8Ees6LRWUVcQio0cJ5EIpb4ck1BT6xmcRdpXGVubf57BHh4
Ширина изображения: 2061
Высота изображения: 1571
Каналы: 1
Если все расшифровано правильно, изображение можно просмотреть в Photoshop (просто сохраните его с расширением .raw).
Спасибо заранее за любые данные.