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

标签 c# postscript run-length-encoding rawimage

我几个月前在以下链接上问过类似的问题: Creating a code to decompress byte-oriented RLE image

我也读过这个问题(更接近我的问题): Extract a bitmap from PostScript

我正在处理 CIP3 文件,这些文件基本上是带有一些附加项目的 PostScript 文件。这里重要的是:
图像矩阵
图片宽/高
图像数据

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

但是,请看这张表: CIP3 Image Orientation Reference

我只在案例 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

channel :1

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

在此先感谢您的任何意见。

最佳答案

您似乎调换了图像宽度和图像高度值。可以使用以下设置将解码数据作为“原始图像数据”读入 Gimp:

  • 图片类型:索引
  • 偏移量:0
  • 宽度:1571
  • 高度:2016
  • 调色板类型:R、G、B(正常)
  • 调色板偏移:0
  • 调色板文件:无

关于c# - 从 PostScript (CIP3) 文件中提取位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57369528/

相关文章:

c# - 当文本框的文本更改时执行方法

c# - 在 ASP.NET Core 的中间件中注入(inject)服务

c# - 在子类中使用父类记录器

Python Tkinter Canvas 产生损坏的后记文件

python - 为数据框中的每个用户查找最长的连续零

python - 列表操作后Groupby对象消失

c# - win2D uwp 不会在 inkcanvas 中保存高亮笔画

pdf - 如何让 Ghostscript 在 PDF 中使用嵌入式字体

iOS 将 "Hello, world"(Helv.Neue Light, 180pt) 渲染为 PDF?

r - 从 Rle 向量高效构建 GRanges/IRanges