从 PostScript (CIP3) 文件中提取位图
Extract a bitmap from a PostScript (CIP3) file
我几个月前就以下 link 问过类似的问题:
而且我也读过这个问题(更接近我的问题):
Extract a bitmap from PostScript
我正在处理 CIP3 文件,它们基本上是带有一些附加项目的 PostScript 文件。这里重要的是:
图像矩阵
图像宽度/高度
图片数据
图像数据是 RLE 编码数据 - 我从几个月前问的问题中得到了解码 RLE 的代码。代码有效,我在一些示例文件上对其进行了测试。
然而,看看这个 table:
我只在案例 1 和案例 2 上工作。但是,当我阅读它时 "from right to left",或者 "from bottom to top" 我无法让它工作。
我试过:
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();
}
我希望输出是有效图像。但是,我得到的所有输出都是模糊图像或 "something else"(不是有效图像)。
我正在提供我正在尝试解码的文件样本。 link 是:
https://drive.google.com/open?id=1iTSyCKTzXGPyONejXnw28KEDacjIpBUl&fbclid=IwAR2DujV_eYBA8Ees6LRWUVcQio0cJ5EIpb4ck1BT6xmcRdpXGVubf57BHh4
图片宽度:2061
图像高度:1571
频道:1
如果一切都正确解码,图像可以在 Photoshop 中查看(只需将其扩展名为 .raw 保存)。
提前感谢您的任何意见。
您似乎调换了图像宽度和图像高度值。可以使用以下设置将解码后的数据作为 "Raw image data" 读入 Gimp:
- 图片类型:索引
- 偏移量:0
- 宽度:1571
- 身高:2016
- 调色板类型:R、G、B(正常)
- 调色板偏移:0
- 调色板文件:None
我几个月前就以下 link 问过类似的问题:
而且我也读过这个问题(更接近我的问题): Extract a bitmap from PostScript
我正在处理 CIP3 文件,它们基本上是带有一些附加项目的 PostScript 文件。这里重要的是: 图像矩阵 图像宽度/高度 图片数据
图像数据是 RLE 编码数据 - 我从几个月前问的问题中得到了解码 RLE 的代码。代码有效,我在一些示例文件上对其进行了测试。
然而,看看这个 table:
我只在案例 1 和案例 2 上工作。但是,当我阅读它时 "from right to left",或者 "from bottom to top" 我无法让它工作。
我试过: 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();
}
我希望输出是有效图像。但是,我得到的所有输出都是模糊图像或 "something else"(不是有效图像)。
我正在提供我正在尝试解码的文件样本。 link 是: https://drive.google.com/open?id=1iTSyCKTzXGPyONejXnw28KEDacjIpBUl&fbclid=IwAR2DujV_eYBA8Ees6LRWUVcQio0cJ5EIpb4ck1BT6xmcRdpXGVubf57BHh4
图片宽度:2061
图像高度:1571
频道:1
如果一切都正确解码,图像可以在 Photoshop 中查看(只需将其扩展名为 .raw 保存)。
提前感谢您的任何意见。
您似乎调换了图像宽度和图像高度值。可以使用以下设置将解码后的数据作为 "Raw image data" 读入 Gimp:
- 图片类型:索引
- 偏移量:0
- 宽度:1571
- 身高:2016
- 调色板类型:R、G、B(正常)
- 调色板偏移:0
- 调色板文件:None