从 PostScript (CIP3) 文件中提取位图

我正在处理 CIP3 文件,这些文件基本上是带有一些附加项目的 PostScript 文件。这里重要的是:

图像矩阵
图像宽度/高度
图像数据

图像数据是 RLE 编码数据 - 我已经从几个月前提出的问题中获得了解码 RLE 的代码。该代码有效,我在我拥有的一些示例文件上进行了测试。

然而,看看这个表:

https://img1.sycdn.imooc.com/64d872860001c13e06220666.jpg

我只在情况 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();

        

    }

我期望输出是有效的图像。然而,我得到的所有输出都是模糊的图像或&ldquo;其他东西&rdquo;(不是有效的图像)。


图像宽度:2061


图片高度:1571


频道:1


如果一切都正确解码,则可以在 Photoshop 中查看图像(只需使用扩展名 .raw 保存)。


预先感谢您的任何意见。


莫回无
浏览 80回答 1
1回答

SMILET

您的“图像宽度”和“图像高度”值似乎互换了。可以使用以下设置将解码后的数据作为“原始图像数据”读入 Gimp:图像类型:索引偏移量:0宽度:1571身高:2016年调色板类型:R、G、B(普通)调色板偏移:0调色板文件:无
打开App,查看更多内容
随时随地看视频慕课网APP