我正在处理 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();
}
我期望输出是有效的图像。然而,我得到的所有输出都是模糊的图像或“其他东西”(不是有效的图像)。
图像宽度:2061
图片高度:1571
频道:1
如果一切都正确解码,则可以在 Photoshop 中查看图像(只需使用扩展名 .raw 保存)。
预先感谢您的任何意见。
SMILET
相关分类